Возникли проблемы с SQL-запросом

#php #mysql

#php #mysql

Вопрос:

Я использую этот запрос (я изменил его):

 // SQL query
$squl = "INSERT INTO 'messages' ('id','name' ,'email' ,'subject' ,'content','userid') VALUES ( null,'".$name."',  '".$mail."',  '".$subject."',  '".$content."','');"; 

// mysql query
$query = mysql_query($squl) or die("message query problem: ".  mysql_error()); 
  

Я получаю эту ошибку:

У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом со ЗНАЧЕНИЯМИ «messages» («id», «name», «email», «subject»,»content», «userid» ) ( null, » atстрока 1

Что является причиной этого?

Комментарии:

1. Вы пытаетесь присвоить пять значений шести столбцам. Похоже, у вас точка вместо запятой между двумя последними значениями; может быть, опечатка?

2. спасибо, но это пока не работает, но спасибо, что потратили свое драгоценное время на поиск проблемы 🙂

Ответ №1:

.``) Вы использовали точку здесь вместо запятой, поэтому функция получает только 5 столбцов, когда ей нужно 6.

Обновить:

Как указывает комментатор ниже, вы заменили обратные знаки кавычками.

 $squl="INSERT INTO `messages` (`id`,`name` ,`email` ,`subject` ,`content`,`userid` )VALUES ( null,'$name',  '$mail',  '$subject',  '$content','');";
  

Комментарии:

1. большое спасибо, и я изменил его на «$squl=»ВСТАВИТЬ В ‘messages’ (‘id’, ‘name’, ’email’, ‘subject’, ‘content’, ‘userid’) ЗНАЧЕНИЯ (‘NULL’, ‘$name’, ‘$mail’, ‘$subject’, ‘$content’,»);»;» но затем я получил эту ошибку «У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с «сообщениями» (‘id’,’name’,’email’, ‘subject’, ‘content’,’userid’ ) ЗНАЧЕНИЯ ( ‘NULL» в строке 1″

2. Пожалуйста, обновите свой вопрос вверху своим кодом. Не забудьте сделать отступ на четыре пробела, чтобы SO рассматривал его как блок кода. Будет сложно устранить вашу синтаксическую ошибку с помощью комментариев.

3. @hatef: теперь вы заменили все обратные ссылки обычными кавычками. Вы не можете использовать кавычки вокруг имен полей — это превращает их в строки, поэтому они больше не рассматриваются как имена полей.

4. я изменил его, но он пока не работает извините, что отнял у вас время:(

5. Какое сообщение об ошибке вы получаете с кодом SQL в моем обновленном ответе? Это допустимый SQL, поэтому должна быть проблема с одной из ваших переменных PHP.

Ответ №2:

 (id,name ,email ,subject ,content,userid )

( NULL,".$name.", ".$mail.", ".$subject.", ".$content."**.**``);
  

вы используете ‘.’ вместо ,

Ответ №3:

Что ж, это самое четкое сообщение, которое вы получаете от SQL. Вы пытаетесь вставить 5 значений в 6 столбцов.

Проблема в том, что между двумя последними значениями нет запятой. Вместо этого есть a . , который заставляет анализатор думать, что это только одно значение.

Ответ №4:

Вы пытаетесь вставить в 6 столбцов:

  1. id
  2. name
  3. email
  4. subject
  5. content
  6. userid

Но указали только 5 значений:

  1. NULL
  2. $name
  3. $mail
  4. $subject
  5. $content

Ответ №5:

У вас есть точка там, где у вас должна быть запятая:

 ".$subject."`,  `".$content."`.``);";
  

Измените эту последнюю точку на запятую, и вы должны быть золотыми

Ответ №6:

У вас есть 6 полей в вашем списке полей, но вы вставляете только 5 значений в свой список значений. Похоже, у вас есть . вместо , :

 `,  `".$subject."`,  `".$content."`.``
                                   ^--- here
  

Кроме того, нет причин использовать повторяющуюся конкатенацию строк, как у вас. PHP может легко вставлять переменные в строки, заключенные в двойные кавычки:

 $sql = "INSERT INTO .... (...) VALUES (NULL, '$name', '$mail', '$subject', '$content', '')";
  

Обратите внимание, что значение ‘null’ не заключено в кавычки. Обратные ссылки предназначены для экранирования зарезервированных слов. Если вы собираетесь вставить реальное значение null базы данных, используйте простое слово null . Если вы хотите ввести буквальную строку ‘null’, то заключите ее в обычные кавычки : 'null' .

Комментарии:

1. я нашел его, а также изменил ‘null’ на null спасибо, но он пока не работает!

Ответ №7:

У вас есть шесть полей, перечисленных в первом наборе круглых скобок, и только пять полей в ЗНАЧЕНИЯХ. Вот что означает количество столбцов.