#php #mysql #zend-framework #select #doctrine
#php #mysql #zend-framework #выберите #доктрина
Вопрос:
У меня есть следующий запрос DQL:
$q = Doctrine_Query::create()
->select('id')
->from('Comment')
->where("active='?' AND object_id='?' AND group_name = '?'"
, array(1, 1, 'unit'));
Которые выдают sql:
SELECT c.id AS c__id, c.group_name AS c__group_name, c.name AS c__name,
c.email AS c__email
FROM comment c
WHERE (c.active = '?' AND c.object_id = '?' AND c.group_name = '?')
bindings: 1, 1, unit
В таблице базы данных:
id user_id object_id group_name name active
1 0 1 unit test 1
Когда я выполняю запрос, он возвращает 0 строк. Почему?
Если я захожу phpmyadmin
и запускаю
SELECT * FROM comment WHERE active=1 AND object_id=1 AND group_name='unit'
результат содержит запись, которую я ищу.
В phpmyadmin запрос, сгенерированный Doctrine, идентифицирует имя таблицы как ‘c’. Это очень странно, поскольку я использовал в своем приложении другие запросы DQL, подобные этому, и они работают.
Спасибо.
Ответ №1:
Удалите кавычки вокруг заполнителей параметров:
where("active=? AND object_id=? AND group_name = ?"
или используйте named parameters
:
where("active= :ative AND object_id= :object_id AND group_name = :group_name"
, array(':ative'=>1, ':objet_id'=>1, 'group_name'=>'unit')"
Комментарии:
1. Если я изменяю его, я получаю сообщение об ошибке, поэтому я использовал ‘?’: «SQLSTATE[HY093]: недопустимый номер параметра: количество связанных переменных не соответствует количеству токенов