2012-04-18 17 views
0

我有一個我使用Zend Framework繼承的大型網站。這是一個內部公司網站,許多員工一直在抱怨錯誤。最後一個人只給出了「對我來說工作很好」的迴應,因此他被解僱了。Zend Framework「無效的參數編號:沒有參數被綁定」得到違規的sql

我經歷了一些研究,發現我可以製造一個錯誤手柄控制器。所以我創建了一個可以捕獲所有錯誤的方法,並且在他們提出時我一直在解決它們(現在我明白了爲什麼這個人說我的工作正常,導致員工在某些事情上搞砸了,而那個人卻沒有有編程的邏輯來處理這些擰緊)。

現在我做了幾個「無效的參數編號:沒有參數被綁定」的錯誤,我有堆棧跟蹤的,所以我知道什麼行導致錯誤。我也有GET和POST值。它引起拋出這個錯誤的一些點有很多邏輯導致它。所以我想知道是否有辦法從Zend_Controller_Plugin_ErrorHandler,如果我可以檢索正在運行的SQL語句。

我知道我可以打包電話,並單獨捕捉它們,但這不會幫助未來出現的問題。任何洞察到這一點將不勝感激。

回答

0

圍繞什麼羅布說基礎,

我去和修改Zend_Db_Exception類。並補充

public $_stmt = null; 

然後在Zend_Db_Statement_Exception類我改變了__construct這樣:

/** 
* @param string $message 
* @param string|int $code 
* @param Exception $chainedException 
    * @param Statment i.e. Query String 
*/ 
public function __construct($message = null, $code = null, Exception $chainedException=null, $_stmt = null) 
{ 
    $this->message = $message; 
    $this->code = $code; 
    $this->_chainedException = $chainedException; 
     $this->_stmt = $_stmt; 
} 
在Zend_Db_Statement_Pdo I類變更

然後所有的

throw new Zend_Db_Statement_Exception($e->getMessage(), $e->getCode(), $e); 

throw new Zend_Db_Statement_Exception($e->getMessage(), $e->getCode(), $e, $this->_stmt); 

然後在我的Zend_Controller_Plugin_ErrorHandler動作中,我有這個引導它。

$errors = $this->_getParam('error_handler'); 
    switch ($errors->type) { 
     case "EXCEPTION_NO_ROUTE": 
     case "EXCEPTION_NO_CONTROLLER": 
     case "EXCEPTION_NO_ACTION": 
      // 404 error -- controller or action not found 
      $this->view->title = "Page Not Found"; 
      break; 
     default: 
      $this->view->title = "Unknown Error"; 
      break; 
    } 

    $sql = null; 
    $offending_query = null; 
    $exception = $errors->exception; 
    try 
    { 
     $offending_query = $exception->_stmt->queryString; 
    } 
    catch (Zend_Exception $e) 
    { } 

隨着這一變化給了Zend DB核心我現在能夠捕捉零影響性能分析器不同一切都是我的問題的SQL語句。

1

如果您使用PHP 5.3,請嘗試從您擁有的異常中獲取以前的異常。

如果不是,請使用Zend_Db_Profiler並記錄查詢,然後全部在錯誤控制器中檢索它們。儘管如此,您可能必須手動匹配錯誤。

+0

以前的異常沒有工作,但Zend_Db_Profiler確實工作,雖然它造成了問題。它在某些部分將系統減速了5秒到1分鐘。所以我必須禁用分析器。 – Pyromanci 2012-04-18 19:44:03

+0

我很驚訝,它讓你感覺很慢,因爲它沒有做太多!但是,在那種情況下,你只剩下猴子補丁的Zend_DB代碼。找到調用異常的代碼行,並在該位置添加一個日誌,以便在該特定代碼段的上下文中存儲任何可以存儲的內容。 – 2012-04-19 04:57:06

相關問題