77 votes

Comment imprimer une requête sql exacte dans le zend framework ?

J'ai le morceau de code suivant que j'ai pris du modèle,

    ...
                  $select = $this->_db->select()
                    ->from($this->_name)
                    ->where('shipping=?',$type)
                    ->where('customer_id=?',$userid);
                 echo  $select; exit; // which gives exact mysql query.
            .....

Quand j'utilise une requête de mise à jour dans zend comme ,

$up_value = array('billing'=> '0');
$this->update($up_value,'customer_id ='.$userid.' and address_id <> '.$data['address_Id']);      

Ici, je veux connaître la requête mysql exacte. Existe-t-il un moyen d'imprimer la requête mysql dans zend ?

136voto

Mark Basmayor Points 1371

Les objets sélectionnés ont une méthode __toString() dans Zend Framework.

Dans le manuel de Zend Framework :

$select = $db->select()
             ->from('products');

$sql = $select->__toString();
echo "$sql\n";

// The output is the string:
//   SELECT * FROM "products"

Une solution alternative serait d'utiliser le Zend_Db_Profiler. c'est-à-dire

$db->getProfiler()->setEnabled(true);

// your code
$this->update($up_value,'customer_id ='.$userid.' and address_id <> '.$data['address_Id']); 

Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQuery());
Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQueryParams());
$db->getProfiler()->setEnabled(false);

http://framework.zend.com/manual/en/zend.db.select.html

27voto

Whisher Points 1853

à partir de >= 2.1.4

echo $select->getSqlString()

16voto

Rajan Rawal Points 1569

J'ai parcouru des centaines de pages, j'ai beaucoup cherché sur Google mais je n'ai pas trouvé de solution exacte. Finalement, ceci a fonctionné pour moi. Indépendamment de l'endroit où vous êtes dans le contrôleur ou le modèle. Ce code a fonctionné pour moi partout. Il suffit d'utiliser ceci

//Before executing your query
$db = Zend_Db_Table_Abstract::getDefaultAdapter();
$db->getProfiler()->setEnabled(true);
$profiler = $db->getProfiler();

// Execute your any of database query here like select, update, insert
//The code below must be after query execution
$query  = $profiler->getLastQueryProfile();
$params = $query->getQueryParams();
$querystr  = $query->getQuery();

foreach ($params as $par) {
    $querystr = preg_replace('/\\?/', "'" . $par . "'", $querystr, 1);
}
echo $querystr;

Finalement, ce truc a marché pour moi.

7voto

Christian P Points 4303

Vous pouvez utiliser Zend_Debug::Dump($select->assemble()); pour obtenir la requête SQL.

Ou vous pouvez activer Profileur Zend DB FirePHP qui vous permettra d'obtenir toutes les requêtes dans un format soigné dans Firebug (même les déclarations UPDATE).

EDIT : Le profilage avec FirePHP fonctionne aussi dans FF6.0+ (pas seulement dans FF3.0 comme suggéré dans le lien)

2voto

AvMishra Points 185

vous pouvez imprimer..

print_r($select->assemble());

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X