如您所觀察到的,CodeIgniter 中的預設事務處理機制需要手動回滾,以防外部函數中發生錯誤。為了解決這個問題,建議採用更全面的方法。
1。將事務處理封裝在模型中:
根據CodeIgniter的架構,資料庫操作應該封裝在Model類別中。這可確保正確的資料處理和模型-視圖-控制器 (MVC) 分離。外部函數只能用作實用程式或幫助程式。
2。外部函數中的錯誤擷取:
在外部函數中,例如insert_function和update_function2,實作錯誤處理,如果發生錯誤則傳回FALSE。這將在事務完成時觸發自動回滾。
範例:
public function insert_function($data)
{
if (!$this->db->insert('transactions_exercices', $data)) {
return FALSE;
}
return TRUE;
}
3.控制器中的異常處理:
在發起事務的控制器中,處理事務期間可能出現的任何異常並執行必要的操作,例如顯示錯誤訊息或記錄異常。
範例:
try {
$this->db->trans_start();
// Call external functions
$result1 = $this->utils->insert_function($data);
$result2 = $this->utils->update_function2($test);
if ($result1 === FALSE || $result2 === FALSE) {
throw new Exception('An error occurred.');
}
$this->db->trans_complete();
} catch (Exception $e) {
$this->db->trans_rollback();
// Handle the exception...
}
注意: 確保在事務配置中停用嚴格模式以允許獨立的事務群組,如提供的解決方案中所述。
替代解決方案:
或者,您可以定義一個自訂事務類別來處理錯誤擷取和自動回滾。這種方法可以為所有事務提供中央錯誤處理。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3