2014-03-28 26 views
0

我聽說你應該在使用mysqli而不是mysql(i)錯誤代碼處理PHP代碼時使用異常。爲什麼MySQLi中的例外PHP

於是,我開始做了應該把所有的錯誤代碼根據錯誤信息來自己的異常的mysqli對象的自己的包裝。關於大量的可能的錯誤代碼和你必須用自己的方法覆蓋所有mysqli方法的事實,我開始懷疑它是否真的有必要。

在大多數情況下,捕獲大多數常見錯誤代碼並提供最常用函數的小封裝就足夠了,但它並不完整,也不是非常安全(即,當您沒有捕獲到某些錯誤代碼時, )。

並用if/else和mysqli_connect_errno(或者像那樣)處理錯誤代碼與使用 ...處理它們非常相似。

那麼,爲什麼是它有用包的mysqli對象轉換成自己的數據庫對象翻譯錯誤代碼爲例外?

你的, GREENY所有的

+0

使用mysqli_sql_exception - 你不需要編寫你自己的包裝器 – Darius

回答

0

首先,這是在現代MVC開發結構的最佳實踐原則和基本。

一些優勢,這將給予你的是,你的開發團隊將花費更少的時間調試,因爲你在你的包中定義的異常將更加細緻和明確一些故障比標準MySQL錯誤會給。

其次(你實際上已經自己說的),例外可以被捕獲,誤差不能,這意味着你的發展的另一個生產率的提高。

0

爲什麼PHP例外的MySQLi

是一個問題。

爲什麼它來包裝的mysqli對象到自己的數據庫對象翻譯錯誤代碼爲例外有用嗎?

是另一個

爲什麼是有用的包裝mysqli的對象到自己的數據庫對象

又是一個不同的。

把所有的錯誤代碼根據錯誤信息來自己的異常。

實際上是唯一真正的問題。

把它們混在一起,你永遠得不到滿意的答案。

你首先必須瞭解的 - 沒有自給自足的目標。每一個行動都必須採取,不是因爲「有人這麼說」,而是因爲你需要它。如果你不需要它 - 最好不要管它。

因此它適用於特定的例外。只有在您有特定場景需要處理時才需要。說,你想趕上「重複鍵」的錯誤。因爲你有一些代碼可以運行。如果是這樣 - 那麼繼續DuplicateKeyException。意味着你總是可以在try..catch中包裝數據庫操作並捕獲這個非常特殊的異常。雖然所有其他例外將不會被捕獲和冒泡。這種方法的一個明顯的優勢 - 你總是知道你需要創建哪些例外。

但是,如果您沒有其他情況,只記錄一個錯誤 - 那麼您根本不需要特定的例外。這使得你的任務變得更加簡單。僅僅因爲mysqli能夠自行拋出異常 - 所以,你不需要拋出任何特定的異常,也不需要捕捉它。