Простое поле SELECT FROM table_name, где TO = "$ to" "возвращает ошибку MySQL 1064 - PullRequest
1 голос
/ 13 ноября 2011

Эта проблема поставила меня в тупик на несколько дней.

У меня есть таблица MySQL, которая выглядит следующим образом:

+--------+------------+------------+-----------+-----------+-----------+
|   id   |   to       |  from      |question   | answer    |  time     |
+--------+------------+------------+-----------+-----------+-----------+
|        |            |            |           |           |           |
| type:  |type:       |type:       |type:      |type:      | type:     |
| int(11)|varchar(26) |varchar(26) |tinyint(3) |tinyint(3) | bigint(20)|
|        |            |            |           |           |           |
|        |            |            |           |           |           |

Я пытаюсь запустить простой SELECT, но получаю сообщение об ошибке. Это код, который я использую для выполнения запроса:

$to = mysql_real_escape_string($_POST['to']);
$query = "SELECT to FROM table_name WHERE to = '$to'";
$result = mysql_query("$query") or die(mysql_error() ."|". mysql_errno());

Когда я пытаюсь запустить это, я возвращаюсь с этим:

У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис, который можно использовать рядом со значением 'to FROM table_name WHERE to =' userOne '' в строке 1 | 1064

1064 в конце - это номер ошибки MySQL, с которым связана ошибка. Ошибка 1064 - это своего рода ошибка синтаксического анализа (Источник: http://dev.mysql.com/doc/refman/5.0/en/error-messages-server.html#error_er_parse_error) Но я не уверен, что является причиной этой ошибки. Также обратите внимание, что ошибка говорит об ошибке в строке 1, но эта строка на самом деле является строкой 68 в моем коде. Я могу выполнять запросы, подобные SELECT * FROM other_table where name = "$name", для других таблиц в моей базе данных.

Есть идеи, почему этот запрос не будет работать правильно?

Ответы [ 2 ]

2 голосов
/ 13 ноября 2011

Эта проблема поставила меня в тупик на несколько дней.

В следующий раз обратитесь за помощью через несколько часов: -)

Проверка MySQLзарезервированные слова .to является зарезервированным словом, и вы должны либо изменить имя поля, либо использовать обратные ноты вокруг него:

`to`
2 голосов
/ 13 ноября 2011

Ошибка возникает из-за того, что слово to является зарезервированным в mysql, как вы можете прочитать здесь: http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

Таким образом, вы должны изменить эту строку:

$query = "SELECT to FROM table_name WHERE to = '$to'";

в это:

$query = "SELECT `to` FROM table_name WHERE `to` = '$to'";
...