我有这个代码在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}
Bill Karwin.. 6
MySQL向其通用查询日志输出SQL查询的模型,其中插入了参数值.但除此之外,您无法在执行时获取SQL,并结合参数值.您需要了解准备好的查询的工作原理:
在准备期间,SQL查询被发送到RDBMS服务器,在那里它被解析和优化并存储在内部表示中 - 通常不再是SQL语句.在您的示例中准备的SQL是'CALL updateResultsByEvent(?, ?, ?, ?)'
.
在执行期间,参数值被发送到RDBMS服务器,在那里它们与内部查询表示相结合.RDBMS在内部将可读的SQL与可执行查询分开.如果您选择再次执行该语句,则可以更轻松地替换不同的参数值.它还可以防止参数值导致SQL注入错误的任何可能性.
通常,您无法以人类可读的形式获得"真正的"SQL查询,因为参数永远不会以执行的形式与查询组合.
MySQL向其通用查询日志输出SQL查询的模型,其中插入了参数值.但除此之外,您无法在执行时获取SQL,并结合参数值.您需要了解准备好的查询的工作原理:
在准备期间,SQL查询被发送到RDBMS服务器,在那里它被解析和优化并存储在内部表示中 - 通常不再是SQL语句.在您的示例中准备的SQL是'CALL updateResultsByEvent(?, ?, ?, ?)'
.
在执行期间,参数值被发送到RDBMS服务器,在那里它们与内部查询表示相结合.RDBMS在内部将可读的SQL与可执行查询分开.如果您选择再次执行该语句,则可以更轻松地替换不同的参数值.它还可以防止参数值导致SQL注入错误的任何可能性.
通常,您无法以人类可读的形式获得"真正的"SQL查询,因为参数永远不会以执行的形式与查询组合.