Você tem um erro na sua syntax SQL; verifique o manual que corresponde à sua versão do servidor MySQL para a syntax certa usar próximo de ” ”) ‘na linha 2

Estou recebendo um erro no MySQL:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''')' at line 2'. 

Código HTML:

 
Subject:
Message:  (300 words left)
<input type="hidden" name="sender_id" value="">

Código para inserir em uma tabela mysql:

 <?php include_once"connect_to_mysql.php"; //submit new message if($_POST['submit_message']){ if($_POST['form_subject']==""){ $submit_subject="(no subject)"; }else{ $submit_subject=$_POST['form_subject']; } $submit_message=$_POST['form_message']; $sender_id = $_POST['sender_id']; if($shortMessagesLeft<1){ $form_error_message='You have left with '.$shortMessagesLeft.' Short Message. Please purchase it from the shop.'; } else if($submit_message==""){ $form_error_message = 'Please fill in the message before sending.'; } else{ $message_left = $shortMessagesLeft-1; $update_short_message = mysql_query("UPDATE message_count SET short_message = '$message_left' WHERE user_id = '$id'"); $sql = mysql_query("INSERT INTO private_messages (to_id, from_id, time_sent, subject, message) VALUES('$sender_id', '$id', now(),'$submit_subject','$submit_message')") or die (mysql_error()); } } ?> 

O que o erro significa e o que estou fazendo de errado?

Existe uma única citação em $submitsubject ou $submit_message

Por que isso é um problema?

O single quote char termina a string no MySQL e tudo depois que é tratado como um comando sql. Você REALMENTE não quer escrever seu sql assim. Na melhor das hipóteses, sua aplicação irá interromper intermitentemente (como você está observando) e na pior das hipóteses, você acabou de apresentar uma enorme vulnerabilidade de segurança.

Imagine se alguém apresentou '); DROP TABLE private_messages; '); DROP TABLE private_messages; em enviar mensagem.

Seu comando SQL seria:

 INSERT INTO private_messages (to_id, from_id, time_sent, subject, message) VALUES('sender_id', 'id', now(),'subjet',''); DROP TABLE private_messages; 

Em vez disso, você precisa desinfetar adequadamente seus valores.

A UM MÍNIMO, você deve executar cada valor através do mysql_real_escape_string() mas você realmente deve estar usando declarações preparadas.

Se você estivesse usando o mysql_real_escape_string() seu código ficaria assim:

 if($_POST['submit_message']){ if($_POST['form_subject']==""){ $submit_subject="(no subject)"; }else{ $submit_subject=mysql_real_escape_string($_POST['form_subject']); } $submit_message=mysql_real_escape_string($_POST['form_message']); $sender_id = mysql_real_escape_string($_POST['sender_id']); 

Aqui está um excelente artigo sobre declarações preparadas e DOP.

Isso é chamado de INJECÇÃO SQL. O ' tenta abrir / fechar uma string na sua consulta mysql. Você sempre deve escaping de qualquer string que entre em suas consultas.

por exemplo,

em vez disso:

 "VALUES ('$sender_id') " 

faça isso:

 "VALUES ('". mysql_real_escape_string($sender_id) ."') " 

(ou equivalente, é claro)

No entanto, é melhor automatizar isso, usando PDO, parâmetros nomeados, declarações preparadas ou muitas outras maneiras. Pesquisa sobre isso e SQL Injection ( aqui você tem algumas técnicas).

Espero que ajude. Felicidades

Certifique-se de ter baixado completamente o sqldump, esse problema é muito comum quando tentamos importar sqldump baixado incompleto / incompleto. Verifique o tamanho do seu arquivo sqldump.

Eu estava recebendo o mesmo erro quando eu usei esse código para atualizar o registro:

 @mysqli_query($dbc,$query or die())) 

Depois de remover or die , ele começou a funcionar corretamente.

Eu tive esse problema antes, e o motivo é muito simples: verifique suas variables, se houvesse cordas, então coloque as citações ‘$ your_string_variable_here’, se fosse numérico mantê-lo sem nenhuma cotação. por exemplo, se eu tivesse esses dados: $ name (Será string) $ phone_number (Será numérico) Então, será assim:

$ query = “INSERT INTO users ( name , phone ) VALUES (‘$ name’, $ phone)”; Assim como isso e será corrigido ^ _ ^