Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 25-06-2008 14:55:01

Bast
Membre
Date d'inscription: 07-06-2007
Messages: 138

[Résolu] 'Zend_Db_Statement_Mysqli_Exception' : 'Query was empty'

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é :

Code:

/**
 * 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 :

Code:

$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 smile )

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

 

#2 25-06-2008 15:43:52

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

Re: [Résolu] 'Zend_Db_Statement_Mysqli_Exception' : 'Query was empty'

Salut,

Je n'ai pas eu le temps d'essayer mais il me semble qu'il manque le query() :

Code:

$select->query()

Parce qu'en général on fais quelques choses de ce genre :

Code:

$oSelect = $this->_db->select()
                ->from($this->_name, array(...fields...))
                ->query();
                ->fetchAll();

Hors ligne

 

#3 25-06-2008 16:11:24

Bast
Membre
Date d'inscription: 07-06-2007
Messages: 138

Re: [Résolu] 'Zend_Db_Statement_Mysqli_Exception' : 'Query was empty'

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

 

#4 25-06-2008 17:12:06

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: [Résolu] 'Zend_Db_Statement_Mysqli_Exception' : 'Query was empty'

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

 

#5 25-06-2008 17:17:08

Bast
Membre
Date d'inscription: 07-06-2007
Messages: 138

Re: [Résolu] 'Zend_Db_Statement_Mysqli_Exception' : 'Query was empty'

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

 

#6 25-06-2008 17:19:40

fte
Membre
Lieu: 06 13 83
Date d'inscription: 16-05-2008
Messages: 112
Site web

Re: [Résolu] 'Zend_Db_Statement_Mysqli_Exception' : 'Query was empty'

Pas tout saisi, mais j'ai déjà eu des soucis de simple JOIN avec Zend_Db_Table_Abstract, j'ai dû rajouter :

Code:

$select->setIntegrityCheck ( false );

exemple :

Code:

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

 

#7 25-06-2008 19:52:34

Bast
Membre
Date d'inscription: 07-06-2007
Messages: 138

Re: [Résolu] 'Zend_Db_Statement_Mysqli_Exception' : 'Query was empty'

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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages