2011-05-01 15 views
0

J'ai la requête DQL suivante:Doctrine Pourquoi cette requête renvoie 0 lignes?

$q = Doctrine_Query::create() 
    ->select('id') 
    ->from('Comment') 
    ->where("active='?' AND object_id='?' AND group_name = '?'" 
      , array(1, 1, 'unit')); 

qui produisent le 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 

Dans le tableau de base de données:

id user_id object_id group_name name active 
1 0  1   unit  test 1 

Quand j'execute de requête renvoie 0 lignes. Pourquoi?

Si je vais dans phpmyadmin et je cours

SELECT * FROM comment WHERE active=1 AND object_id=1 AND group_name='unit' 

le résultat contient le disque que je cherche.

Dans phpmyadmin, la requête générée par Doctrine identifie le nom de la table comme 'c'. C'est très étrange, puisque j'ai utilisé dans mon application d'autres requêtes DQL comme celle-ci et fonctionne.

Merci.

Répondre

1

Supprimez les guillemets autour des espaces réservés paramètres:

where("active=? AND object_id=? AND group_name = ?" 

ou utilise named parameters:

where("active= :ative AND object_id= :object_id AND group_name = :group_name" 
     , array(':ative'=>1, ':objet_id'=>1, 'group_name'=>'unit')" 
+0

Si je change, je reçois une erreur, donc je '?: « SQLSTATE [HY093]: Numéro de paramètre invalide: le nombre de variables liées ne correspond pas au nombre de jetons – Emanuel

+0

réponse mise à jour. – manji

Questions connexes