Zend DB, где ошибка пункта - PullRequest
       7

Zend DB, где ошибка пункта

0 голосов
/ 14 марта 2012

РЕДАКТИРОВАТЬ:

$ query-> где ('`значение` =?', $ Число); Кажется, что делает работу.Я до сих пор не знаю, почему это не будет работать в нормальных условиях, но это обходной путь ... все еще ищу правильный ответ!


Я пытаюсь запросить БД с помощью простого:

$number = 4;
$query = $this->select();
$query->where('value = ?', $number);
$row = $this->fetchRow($query);

Но по какой-то причине я постоянно получаю эту ошибку:

SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1064 В синтаксисе SQL есть ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'value = 4) LIMIT 1' в строке 1

Когда я выполняю сборку, чтобы увидеть строку запроса:

SELECT `mighty_table`.* FROM `mighty_table` WHERE (value = 4)

Имя моего столбца не экранировано ..

Должен ли Zend DB сделать это?: |Это странно, так как я использую этот же метод в других проектах, и он всегда работает ..

Ответы [ 2 ]

3 голосов
/ 15 марта 2012

Из руководства пользователя Zend :

Примечание. Значения и идентификаторы в выражении SQL не заключаются в кавычки для тебя. Если у вас есть значения или идентификаторы, которые требуют цитирования, вы несут ответственность за это. Используйте quote (), quoteInto () и Метод quoteIdentifier () адаптера базы данных.

Так, например, вы можете использовать quoteInto:

$number = 4;
$query = $this->select();
$where = $this->getAdapter()->quoteInto('value = ?', $number);
$query->where($where);
$row = $this->fetchRow($query);
1 голос
/ 17 марта 2012

«значение» действительно зарезервированное слово в MySQL.В результате вы должны избежать его с помощью обратных тиков.

Я ожидал бы, что это сработает:

$fieldName = $this->getAdapter()->quoteIdentifier('value');
$query->where($fieldName = ?", $number);
...