Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour à tous !
Je me retrouve avec une exception totalement inattendue.
Je tente de faire un $select->join(...), et c'est à ce moment que l'exception est levée.
Voici son message intégral :
Fatal error: Uncaught exception 'Zend_Db_Statement_Mysqli_Exception' with message 'Mysqli prepare error: Query was empty' in [blabla]
Le code incriminé :
/** * Fonction getSqlQuery * Se charge d'ajouter les clauses WHERE à un objet Zend_Db_Select * * @param Zend_Db_Select $select * @return Zend_Db_Select $select alourdi de quelques where()... */ public function getSqlQuery($select) { foreach ($this->getFacettes() as $facette) { if($syntaxe = $facette->getSqlSyntax()) { if ($jointure = $facette->getJointure()) { $select->join($jointure['table'], $jointure['condition']); } switch (get_class($facette)) { case 'Biyum_Facette_List': $select->where($syntaxe, $facette->getSelectedChoiceValue()) ; break; case 'Biyum_Facette_List_Typebien': $select->where($syntaxe) ; break; } } } echo('<br />Requête :<br />' . $select->__toString() . '<br /><br />') ; // TODO : à supprimer en prod return $select ; }
Et le code qui l'appelle :
$programmes = new Programmes() ; $select = $programmes->select() ; $select = $search_engine->getSqlQuery($select) ; $select->limit(10); $found_programs = $programmes->fetchAll($select) ; // Exception levée ici !
Je précise que si je retire le join, le fetchAll() ne plante plus (par contre je n'obtiens évidemment pas le result attendu, logique )
Je n'ai pas vraiment d'idée quant-à la manière de débugger tout ça... Je n'avais encore jamais rencontré cette exception. Savez-vous d'où cela peut venir ?
Des pistes pour débugger ?
Merci d'avance !
Dernière modification par Bast (25-06-2008 16:43:32)
Hors ligne
Salut,
Je n'ai pas eu le temps d'essayer mais il me semble qu'il manque le query() :
$select->query()
Parce qu'en général on fais quelques choses de ce genre :
$oSelect = $this->_db->select() ->from($this->_name, array(...fields...)) ->query(); ->fetchAll();
Hors ligne
Il ne s'agit pas d'un $this->_db->select() (qui renvoit un Zend_Db_Select), mais d'un $programmes->select() (qui renvoit un Zend_Db_Table_Select) ! ($programmes étant une instance de Programmes, qui étend Zend_Db_Table)
Dernière modification par Bast (25-06-2008 16:14:24)
Hors ligne
Heu j'ai pas lu tout le code, mais if($a = 4) retournera toujours true, c'est une affectation ......
En revanche une comparaison, elle, renvoie un booléen if ($a == 4).
Pour éviter ce genre d'erreur, on inverse le sens du if : if(4 == $a) :-)
Hors ligne
En l'occurence, c'est bien dans ce sens que je dois le faire.
Les fonctions retournent une valeur si elle existe (attrapée par $a), ou bien false (qui fait planter le test if() ).
Hors ligne
Pas tout saisi, mais j'ai déjà eu des soucis de simple JOIN avec Zend_Db_Table_Abstract, j'ai dû rajouter :
$select->setIntegrityCheck ( false );
exemple :
class News extends Zend_Db_Table_Abstract { public function getNouvelles() { $select = $this->select (); $select->setIntegrityCheck ( false ); // pour le join sinon erreur $select->from ( $this )->order ( 'heuredate DESC' ) ->join ( 'categories', 'id_categorie = categories.id', array ('categorie' ) ); return $this->fetchAll ( $select ); }
Dernière modification par fte (25-06-2008 17:24:30)
Hors ligne
Salut, et merci pour le coup de main. En fait l'un de mes posts s'est perdu, dans lequel j'expliquais que c'était bien le setIntegrityCheck(false) qui manquait.
Mon problème est donc résolu, mais je n'en ai pas encore fini (d'autres bugs). Je posterai sûrement demain ^^
Bonne soirée !
Hors ligne
Pages: 1