2013-06-27 3 views
-1
$NumPMs = mysql_query("SELECT * FROM messages WHERE to_user='$name' AND read='0'") or die (mysql_error()); 
$numofpms = mysql_num_rows($NumPMS); 

Я получаю эту ошибку:Этот запрос 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 'read='0'' at line 1 

Это не имеет смысла. Он должен работать.

Помощь будет оценена!

EDIT:

Я изменил запрос к этому: $ NumPMs = mysql_query ("SELECT * FROM сообщения WHERE to_user = '$ имя' AND read = '0'") или умереть (mysql_error());

Это работает. Хотя мой mysql_num_rows также высвечивает ошибку: Предупреждение: mysql_num_rows() ожидает, что параметр 1 будет ресурсом, null указан в /home/recatio2/public_html/Main.php в строке 78

Пожалуйста, помогите.

+0

Вы пробовали распечатать свой запрос? Оказывается, как вы ожидаете? – Novocaine

+2

'READ' - это зарезервированное слово, попробуйте поместить его обратно. – Barmar

ответ

2

вам следует избегать имен полей и $ name перед добавлением его в SQL.

$NumPMs = mysql_query("SELECT * FROM `messages` WHERE `to_user`='". mysql_real_escape_string($name)."' AND `read`='0'") or die (mysql_error()); 
+0

Это, вероятно, верно (предполагая, что $ name ранее не удалялось), но это не относится к ошибке. –

+0

Я делаю это, и запрос работает, хотя mysql_num_rows этого не делает. Это ошибки с этим: Предупреждение: mysql_num_rows() ожидает, что параметр 1 будет ресурсом, null указан в /home/recatio2/public_html/Main.php в строке 78. Все ответы дают это. Пожалуйста помоги! – Karten

+0

Майк Пелли, прочитайте полный ответ. escape $ name (означает значения) и FIELDS (означает имена полей, столбцы). – Electronick

2

read - зарезервированное ключевое слово в MySQL. Вы можете избежать всех ваших названий полей с помощью обратной связи:

$NumPMs = mysql_query("SELECT * FROM messages WHERE `to_user`='$name' AND `read`='0'") or die (mysql_error()); 
+0

Я делаю это, и запрос работает, хотя mysql_num_rows этого не делает. Это ошибки с этим: Предупреждение: mysql_num_rows() ожидает, что параметр 1 будет ресурсом, null указан в /home/recatio2/public_html/Main.php в строке 78 – Karten

+0

Проблема в том, что вы возвращаете запрос в $ NumPMs, но затем используете mysql_num_rows () против $ NumPMS - PHP чувствителен к регистру – Kickstart

+0

Спасибо, кикстарт! Он работает сейчас. Я этого не заметил. Благодаря!!! – Karten

1

READ - это слово mysql_reserved; вы можете увидеть список по адресу: http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

Одно из решений, чтобы избежать его обратных кавычек:

SELECT * FROM messages WHERE to_user='$name' AND `read`='0' 

Другим переименовать поле, что-то другое - это не хорошая практика, чтобы использовать зарезервированные слова для столбца или имена таблиц.

0
$NumPMs = mysql_query("SELECT * FROM messages m WHERE m.to_user='$name' AND m.read='0'") 

Используйте псевдоним для таблицы, чтобы избежать конфликтов с зарезервированными ключевыми словами MySQL.

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