2013-06-28 82 views
2

我正在學習PHP,並有一個問題。PDO錯誤是否出現在Apache的錯誤日誌中?

如果我使用下面的代碼連接到數據庫,Apache的錯誤日誌中會出現可能的錯誤嗎?

$con = new PDO('mysql:host='.$h.';dbname='.$dbn.';charset=utf8', $u, $p); 
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); 
    $con->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); 

如果他們確實出現在那裏,那麼使用try和catch的原因是什麼?

謝謝。

回答

3

這是一個很好的問題。
大多數PHP用戶不理解異常,並認爲這些與錯誤報告有關,並完全濫用它們!雖然正確的答案很簡單:

可能的錯誤會出現在Apache的錯誤日誌裏面嗎?

是的,如果你告訴PHP來記錄你的錯誤。 ini設置對此負責。

如果他們確實出現在那裏,那麼使用try和catch的原因是什麼?

這是最有趣的問題。
要處理一個錯誤消息應該永遠不會使用嘗試捕獲
該機制處理錯誤。不是錯誤消息。這裏有本質的區別,但被大多數PHP人士誤解。

要處理錯誤消息您只需告訴PHP記錄錯誤。
雖然如果你要處理一個錯誤本身,嘗試捕獲是不可或缺的。

什麼是處理錯誤?
凡是你在錯誤的情況下做的錯誤記錄身邊:

回滾事務

try { 
    $dbh->beginTransaction(); 
    // some SQL stuff 
} catch (Exception $e) { 
    $dbh->rollback(); 
    throw $e; 
} 

請注意,我們處理錯誤

後重新拋出異常在不重要的代碼塊中出錯非致命

try { 
    some_non_critical_function(); 
} catch (Exception $e) { 
    log_error($e->getMessage().$e->getTrace()); 
} 

這裏我們必須手動記錄錯誤消息,但讓代碼的其餘部分運行。

等等。