PHP PDO подготовленный запрос отказывается выполнить должным образом - проблема уходит? - PullRequest
1 голос
/ 30 июня 2009

У меня проблема с запросом, подготовленным в PHP с PDO. Код:

$link = new PDO("mysql:dbname=$dbname;host=127.0.0.1",$username,$password);
$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = $link->prepare("SELECT locality_name FROM :passedday GROUP BY locality_name ORDER BY locality_name DESC");
$query->bindParam(":passedday",$day); //Where day is, well, a day passed to the script elsewhere
$query->execute();
$result = $query->fetchAll();
$link = null;
//Do things with the $result.

Я получаю сообщение об ошибке:

SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1064 В синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с '' 05_26_09 'GROUP BY locality_name ORDER BY locality_name DESC' в строке 1

Когда я выполняю запрос непосредственно на сервере, он без проблем возвращает соответствующий набор результатов. Есть идеи, что я делаю не так?

ТИА.

Edit:

$day передается как аргумент GET. Итак, http://127.0.0.1/day.php?day=05_26_09 приводит к $day = $_GET['day'];.

Ответы [ 2 ]

2 голосов
/ 30 июня 2009

Если 05_26_09 ставит ставку на имя стола, то, я думаю, у вас проблема с выходом. Отличается ли ваша локальная операционная система от живого сервера?

Не думаю, что вы можете использовать bindValue() / bindParam() для чего-то другого, кроме значений (например, имя таблицы, имя поля). Поэтому я немного удивлен, что это работает в вашей локальной системе.

1 голос
/ 30 июня 2009

PDO использует C-API mysql для подготовленных операторов.
http://dev.mysql.com/doc/refman/5.0/en/mysql-stmt-prepare.html говорит:

Маркеры допустимы только в определенных местах в операторах SQL. [...] Однако они не разрешены для идентификаторов (таких как имена таблиц или столбцов)
В качестве практического правила я использую: «если вы не можете заключить его в одинарные кавычки в специальном запросе строка, которую вы не можете параметризовать в подготовленном выражении "
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...