2009-09-20 6 views
4

ZEND 내에 저장 프로 시저를 호출하는 코드가 있습니다. 실행될 SQL 명령을 인쇄하는 방법이 있습니까?Zend 저장 프로 시저

$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(); 

매개 변수 값이 올바르게 전달되었는지 확인하려고합니다. 그 general query log

#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} 

답변

6

MySQL의 출력 그것에 보간 파라미터 값과 SQL 쿼리의 모형. 하지만 그 외의 경우 매개 변수 값과 결합하여 SQL이 실행될 때 SQL을 얻을 수 없습니다. -하지 일반적으로 SQL 문 동안

  • 는 SQL 쿼리를이 내부 표현 구문 분석 및 최적화 저장되어있는 RDBMS 서버로 전송되고, 준비 : 당신은 쿼리가 작동하는 방법을 준비 이해할 필요 더 이상. 귀하의 예제에서 준비된 SQL은 'CALL updateResultsByEvent(?, ?, ?, ?)'입니다.

  • 을 실행하면 매개 변수 값이 RDBMS 서버로 보내지며, 여기서 매개 변수 값은 내부 쿼리 표현과 결합됩니다. RDBMS는 사람이 읽을 수있는 SQL을 실행 가능한 쿼리와 별도로 내부적으로 유지합니다. 이렇게하면 명령문을 다시 실행하도록 선택한 경우 다른 매개 변수 값을 쉽게 대체 할 수 있습니다. 또한 매개 변수 값으로 인해 SQL 주입 오류가 발생할 수있는 가능성을 방지합니다. 매개 변수가 실행되는 형태로 쿼리와 결합하지 않기 때문에

는 일반적으로, 당신은 사람이 읽을 수있는 형태로 "진짜"SQL 쿼리를 얻을 수 없습니다.

+0

설명해 주셔서 감사합니다. SP에 대해 많은 것을 이해할 수있었습니다. –