Doctrine Почему этот запрос возвращает 0 строк?

#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]: недопустимый номер параметра: количество связанных переменных не соответствует количеству токенов