2011-12-29 101 views
0

我正在使用PDO連接到mysql數據庫。我很困惑,我應該在哪裏使用try catch塊,如果我設置錯誤屬性像這樣: $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);PDO try-catch和異常屬性

現在我有我的連接信息(用戶名,密碼等)和上面的行在單獨文件,我將包括在我的主要文件中。這些(連接信息和上面的行)存儲在try-catch塊中。

在我的主要文件中,我包含這個文件。我是否也需要在我的主文件中使用try-catch塊(在pdo相關的東西周圍)? (他們是我創建和執行查詢的地方)。

+0

考慮選擇[有意義的用戶名](http://tinyurl.com/so-hints)。這樣做的一個好處是其他人可以使用[at-replies](http://meta.stackexchange.com/questions/43019/how-do-comment-replies-work),你會得到一個有人向你發出的通知在評論中。 – outis 2011-12-29 03:08:41

回答

1

與所有例外情況一樣,只要不處理它們,並且在處理它們時有意義,就需要處理它們。對於每一種可能拋出的方法,問問你自己在哪裏可以正確處理?當可能拋出它們的PDO函數被調用時,但在更高層次上捕獲異常是沒有意義的。 (例如,在創建新的PDO對象時處理PDOException是沒有意義的,因爲後面的代碼將取決於具有有效的PDO對象;相反,它必須在可以嘗試從異常中恢復或正常失敗)。這是異常的原因:可能會在較低的級別檢測到錯誤,但可能沒有足夠的信息來處理錯誤。所以,代碼會拋出一個異常到更高的地方來處理錯誤。

在一個設計良好的項目中,數據存儲訪問被隔離爲一個模塊,因此其餘大部分代碼不受數據存儲的確切性質影響。在具有這種分離的體系結構(如多層或MVC)中,數據存儲異常將在數據訪問層中處理,但「處理」可能意味着拋出不同類型的異常。

它有助於思考exception handling strategies

  • 重試通過固定的東西,通過重新啓動的操作
  • 繼續與進程嘗試失敗的操作再次
  • 重試和試操作在以後時間(不要只是繼續,忽略例外)
  • 向更高級別拋出異常(可能是相同的例外)
  • 重試向用戶顯示錯誤消息,給他們一個修復某些東西的機會(如果是的話)重試失敗的操作
  • 向用戶顯示一條錯誤消息並結束(輸出HTML時只有don't use or die;無效的HTML不是優雅的)。

另請參閱:「Exception-handling antipatterns」。

如果您問是否將錯誤模式設置爲PDO::ERRMODE_EXCEPTION會導致異常被捕獲,事實上恰恰相反。只有catch塊可以處理異常。

+0

謝謝,由於我使用PDO setAttribute功能,我對try-catch塊是否多餘感到困惑 – user1114 2011-12-29 02:57:24

+0

如果答案似乎無法解決您的問題,請編輯您的問題以澄清它。 SO是一個問答網站,而不是論壇。它運行於[寫得很好的問題](http://sscce.org/)。評論並不意味着討論;它們適用於諸如澄清請求,簡短註釋等。 – outis 2011-12-29 03:10:02