#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 столбцов:
id
name
email
subject
content
userid
Но указали только 5 значений:
NULL
$name
$mail
$subject
$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:
У вас есть шесть полей, перечисленных в первом наборе круглых скобок, и только пять полей в ЗНАЧЕНИЯХ. Вот что означает количество столбцов.