Zend framework Zend存储过程

Zend framework Zend存储过程,zend-framework,stored-procedures,Zend Framework,Stored Procedures,我有一段代码,它调用ZEND中的存储过程。有没有办法打印将要执行的SQL命令 $sp = $dbAdapter->prepare('CALL updateResultsByEvent(?, ?, ?, ?)'); $sp->bindParam(1,$id); $sp->bindParam(2,$event->name); $sp->bindParam(3,$event->distance); $sp->bindParam(4,$event->uni

我有一段代码,它调用ZEND中的存储过程。有没有办法打印将要执行的SQL命令

$sp = $dbAdapter->prepare('CALL updateResultsByEvent(?, ?, ?, ?)');
$sp->bindParam(1,$id);
$sp->bindParam(2,$event->name);
$sp->bindParam(3,$event->distance);
$sp->bindParam(4,$event->unit);
// print $sp;????
$sp->execute();
我正在尝试验证参数值是否正确传递

#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}
MySQL向其输出一个SQL查询模型,其中插入了参数值。但除此之外,您无法在执行SQL时将其与参数值结合起来。您需要了解准备好的查询是如何工作的:

  • 在准备过程中,SQL查询被发送到RDBMS服务器,在那里它被解析、优化并存储在一个内部表示中——通常不再是SQL语句。在您的示例中准备的SQL是
    “调用updateResultsByEvent(?,,,?)”

  • 在执行期间,参数值被发送到RDBMS服务器,在那里它们与内部查询表示相结合。RDBMS在内部将人类可读的SQL与可执行查询分开。如果选择再次执行该语句,则可以更轻松地替换不同的参数值。它还可以防止参数值导致SQL注入错误的任何可能性


一般来说,您无法以人类可读的形式获得“真正的”SQL查询,因为参数从未与执行的表单中的查询组合。

感谢您的解释。它帮助我了解了很多关于SPs的知识。