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


Answers

de> = 2.1.4

echo $select->getSqlString()
Question

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 like,

$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. Est-il possible d'imprimer la requête mysql dans zend? bon conseil




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

Ou vous pouvez activer le profileur Zend DB FirePHP qui vous obtiendra toutes les requêtes dans un format soigné dans Firebug (même les instructions UPDATE).

EDIT : Profilage avec FirePHP fonctionne également en FF6.0 + (pas seulement en FF3.0 comme suggéré dans le lien)




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

// your code    
$this->update('table', $data, $where);    
Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQuery());    
Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQueryParams());    
$db->getProfiler()->setEnabled(false);



Découvrez le Zend_Db_Profiler . Cela vous permet de consigner n'importe quelle instruction SQL lors de sa préparation et de son exécution. Cela fonctionne pour les instructions UPDATE ainsi que pour les requêtes SELECT.







Je l'ai fait de cette façon

$sql = new Sql($this->adapter);
        $select = $sql->select();
        $select->from('mock_paper');
        $select->columns(array(
            'is_section'
        ));
        $select->where(array('exam_id = ?' => $exam_id,'level_id = ?' => $level_id))->limit(1);



        $sqlstring = $sql->buildSqlString($select);
        echo $sqlstring;
        die();