PHP MySQL терпит неудачу всякий раз, когда присутствует оператор WHERE - PullRequest
0 голосов
/ 05 декабря 2009

Я пытаюсь сделать простой запрос к небольшой таблице MYSQL, но когда я вставляю предложение Where, я внезапно получаю ошибку недопустимого запроса (добавляется while(mysql_fetch_array ){} при работе без where). Консоль MYSQL выдает ошибку 1064 (синтаксис), однако я проверил документацию MYSQL и, насколько я могу определить, использую правильный синтаксис.

<?php
$ind=rand(1,3);
$quote=Null;
$sign=Null;
$afil=Null;
$con=mysql_connect(localhost,root,********);//connect to database
mysql_select_db("phone_site",$con);//select table
$query="SELECT * FROM quotes WHERE index=$ind";//get the row for that index
$data=mysql_query($query);
//print out text
print ("<p id=\"quote\">" . $data['quote'] . "</p>");
print ("<p id=\"ename\">" . $data['sign'] . "</p>");
print ("<p id=\"afill\">--  " . $data['afil'] . "</p>");
mysql_close($con);//close connection
?>

Кто-нибудь знает, в чем проблема? Я использую XAMPP. Что-то не так с MYSQL?

Ответы [ 3 ]

11 голосов
/ 05 декабря 2009

INDEX является одним из зарезервированных слов MySQL :

Некоторые слова, такие как SELECT, DELETE, или BIGINT защищены и требуют специальное лечение для использования в качестве идентификаторы, такие как таблица и столбец имена. Это также может быть верно для имена встроенных функций.

Зарезервированные слова разрешены как идентификаторы, если вы указываете их как описано в Раздел 8.2, «Схема Имена объектов »

Если у вас есть столбец с таким именем, вы должны указать имя столбца в кавычках - см. Имена объектов схемы :

Символ кавычки идентификатора backtick («` »)

Что означает, что ваш запрос должен выглядеть следующим образом:

$query="SELECT * FROM quotes WHERE `index`=$ind";


Чтобы завершить мой ответ, увидев пыль машины , который сказал:

Я немного удивлен, что это не так пожаловаться, когда таблица была создана.

Полагаю, таблица была создана с помощью некоторого инструмента, такого как phpMyAdmin или MySQL Workbench; и те вообще (всегда для некоторых) цитируют имена столбцов, чтобы избежать подобных проблем.


Редактировать после комментария: Я не видел, но вы используете этот вид кода:

$data=mysql_query($query);
print ("<p id=\"quote\">" . $data['quote'] . "</p>");

Функция mysql_query не возвращает данные напрямую: она только возвращает "ресурс" (цитирование страницы руководства) :

Ресурс возвращаемого результата должен быть передано mysql_fetch_array(), и другие функции для работы с таблицы результатов, чтобы получить доступ к возвращенным данные.

Не уверен, что это решит все ваши проблемы (ничего не отображается, даже необработанные теги HTML нечетны) , но это может хотя бы немного помочь ...

1 голос
/ 09 октября 2011

Попробуйте, у меня все работает:

$query="SELECT * FROM quotes WHERE index='$ind'";
1 голос
/ 05 декабря 2009

Я думаю, что проблема заключается в использовании слова index - это зарезервированное слово со специальным значением и не должно использоваться в качестве имени столбца. Я немного удивлен, что он не жаловался при создании таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...