2013-01-19 61 views
0

從我的擴展從Joomla 2.5到3.0,我很苦惱如何做數據庫錯誤處理(因爲GetErrorNum已棄用,另請參閱Joomla! JDatabase::getErrorNum() is deprecated, use exception handling instead)。Joomla 3.0通用數據庫錯誤處理

,這似乎是一個根據上面鏈接的問題,要走的路,是添加以下代碼爲每個db->query()代碼:

if (!$db->query()) { 
    throw new Exception($db->getErrorMsg()); 
} 

在我看來,這使得DB錯誤處理更加尷尬比以前。到目前爲止,我只是在DB調用後調用checkDBError()函數,該函數查詢ErrorNum並相應地處理任何可能的錯誤。

這是獨立於數據庫的查詢是如何在實際觸發 - 有不同的方法來做到這一點,並在錯誤不同的結果:$db->loadResult()回報null上的錯誤,$db->query()回報false。所以現在會有不同的檢查不同的數據庫訪問類型。

是否有任何通用的方法來處理這個問題,例如一種告訴Joomla在DB問題上拋出一些例外的方法?或者我必須圍繞DatabaseDriver編寫自己的包裝才能實現這個目標?或者我可能錯過了一些明顯的東西?

或者我應該忽略現在的棄用警告並繼續使用getErrorNum()?我想讓我的擴展能夠面向未來,但我也不想用太尷尬的錯誤處理邏輯來混淆它。

+0

@ user3145373如何在另一個問題上重複這個問題?這個是關於Joomla中的通用數據庫錯誤處理,尤其是。 3.0,而你鏈接的是關於上傳Joomla 2.5中的文件 - 雖然有一些數據庫訪問那裏,我沒有看到**任何**錯誤處理在那裏 – codeling

回答

-1

獲取getErrorNum()函數將解決您的問題....

$result = $db->loadResult(); 

    // Check for a database error. 
    if ($db->getErrorNum()) 
    { 
     JFactory::getApplication()->enqueueMessage($db->getErrorMsg()); 

     return false; 
    } 
+0

'getErrorNum()'正是我迄今爲止所使用的,正如我在問題中所陳述的那樣......但不推薦使用;而用什麼*代替*就是這裏的問題,所以這完全忽略了這個問題的重點 – codeling