Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Question toute bête mais je sèche. Je voudrais afficher "en debug" la requête exacte réalisée via ZF.
Dans le cas d'un select type :
$select = $db->select(); ... $result = $db->fetchOne($select);
C'est tout bête, j'ai juste à faire un $select->__toString();
(mais il y a peut être mieux ? - c'est une méthode censée ne pas être appelée de l'extérieur, cf. __).
Par contre avec l'appel suivant sur un update :
$set = array(...); $where = array(...); $db->update('maTable', $set, $where);
Comment faire pour voir la requête réellement executée par ZF ?
En clair j'aurais voulu une méthode $db>lastSQL(); qui me retournerait le contenu exact de la dernière requête SQL executée en base. Est-ce qu'il faut regarder du côté des profiler ?
(N.B. : oui, normalement, çà ne devrait pas être utile, mais en mise au point c'est quand même assez pratique, surtout sur des DAO avec pas mal de paramètres)
Dernière modification par Killing Joke (09-05-2007 23:54:14)
Hors ligne
Pour le premier exemple, il me semble que c'est echo $select->__toString()
Hors ligne
Le mieux pour le débug c'est de faire dans le cas ou ton Zend_Db::factory est dans ton registre sous db :
Zend_registry::get('db')->getProfiler()->setEnabled(true);
Et ensuite en fin de code aprés ton dispatch faire un Zend_registry::get('db')->getProfiler()->getQueryProfiles(); cela te renvoi un tableau de toutes les requetes executées.
Quant à Zend_registry::get('db')->getProfiler()->getTotalNumQueries() te renvoi le nombre totale de requtes aussi c'est pratique
Dernière modification par Isilgawen (10-05-2007 09:19:44)
Hors ligne
Pour le __toString, qui est une structure de langage objet que l'on retrouve dans tous les langages objets, voyez la doc officielle, pour lever toute confusion.
On ne fait pas echo $objet->__tostring, mais echo $objet ( qui va appeler __toString() si elle existe ).
Hors ligne
Salut,
j'ai aussi un problème pour récupérer la requête SQL.
$req = 'SELECT xxx FROM yyy'; $var = $db->fetchOne($req);
Si la requête $req contient une erreur, Zend_Db renvoie une exception. Or je gère les exceptions avec set_exception_handler et une fonction callback qui a comme argument un objet de la classe Zend_Exception.
Question : comment récupérer la requête qui pose problème à partir de ma fonction de callback ?
Hors ligne
Julien pour prendre la défense de Damien je pense qu'il faisait référence à
ce qui est dit dans le manuel du Z-F : http://framework.zend.com/manual/en/zen … e.tostring
Damien, dans le manuel du Z-F, la méthode __toString() est appellée pour récupérer le résultat et non l'afficher. Quand tu as juste besoin de l'afficher tu peux te passer de l'appel à la méthode __toString() qui sera fait automatiquement.
Hors ligne
Pages: 1