2009-09-20 7 views
4

J'ai ce code qui appelle une procédure stockée dans ZEND. Est-il possible d'imprimer la commande SQL qui sera exécutée? J'essaie de vérifier que les valeurs des paramètres sont correctement transmises.Zend Stored Procédure

#0 C:\projects\ABC\library\1.9.2\Zend\Db\Statement.php(284): Zend_Db_Statement_Mysqli->_execute(NULL) 
#1 C:\projects\ABC\application\controllers\AdminController.php(53): Zend_Db_Statement->execute() 
#2 C:\projects\ABC\library\1.9.2\Zend\Controller\Action.php(513): AdminController->updateleagueresultsbyeventAction() 
#3 C:\projects\ABC\library\1.9.2\Zend\Controller\Dispatcher\Standard.php(289): Zend_Controller_Action->dispatch('updateleagueres...') 
#4 C:\projects\ABC\library\1.9.2\Zend\Controller\Front.php(946): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) 
#5 C:\projects\ABC\library\1.9.2\Zend\Application\Bootstrap\Bootstrap.php(77): Zend_Controller_Front->dispatch() 
#6 C:\projects\ABC\library\1.9.2\Zend\Application.php(346): Zend_Application_Bootstrap_Bootstrap->run() 
#7 C:\projects\ABC\public\index.php(29): Zend_Application->run() 
#8 {main} 

Répondre

6

sorties MySQL à son general query log un facettisés de la requête SQL avec des valeurs de paramètres interpolés en elle. Mais à part cela, vous ne pouvez pas obtenir le SQL tel qu'il est exécuté, combiné avec les valeurs des paramètres. Vous devez comprendre comment les requêtes préparées travail:

  • Pendant préparer, une requête SQL est envoyée au serveur SGBDR, où il est analysé et optimisé et stocké dans une représentation interne - ne sont généralement pas une instruction SQL plus. Le code SQL préparé dans votre exemple est 'CALL updateResultsByEvent(?, ?, ?, ?)'.

  • Au cours exécuter, les valeurs de paramètre sont envoyées au serveur SGBDR, où ils sont combinés avec la représentation de requête interne. Le SGBDR conserve le SQL lisible par l'homme distinct de la requête exécutable en interne. Cela rend plus facile de substituer différentes valeurs de paramètres si vous choisissez d'exécuter à nouveau l'instruction. Cela empêche également toute possibilité qu'une valeur de paramètre peut entraîner une erreur d'injection SQL.

En général, vous ne pouvez pas obtenir la requête SQL « réel » sous forme lisible par l'homme, parce que les paramètres ne sont jamais associés à la requête sous la forme qui est exécutée.

+0

Merci d'expliquer cette page. Cela m'a aidé à comprendre un * lot * sur les PS. –