如您所觀察到的,CodeIgniter 中的預設事務處理機制需要手動回滾,以防外部函數中發生錯誤。為了解決這個問題,建議採用更全面的方法。
1.將交易處理封裝在模型中:
根據CodeIgniter的架構,資料庫操作應該封裝在Model類別中。這可確保正確的資料處理和模型-視圖-控制器 (MVC) 分離。外部函數只能作為實用程式或助手。
2.外部函數中的錯誤捕獲:
在外部函數內,例如 insert_function 和 update_function2,實現錯誤處理,如果發生錯誤則返回 FALSE。交易完成後會觸發自動回滾。
範例:
<code class="php">public function insert_function($data) { if (!$this->db->insert('transactions_exercices', $data)) { return FALSE; } return TRUE; }</code>
3.控制器中的異常處理:
在發起事務的控制器中,處理交易期間可能出現的任何異常並執行必要的操作,例如顯示錯誤訊息或記錄日誌
範例:
<code class="php">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... }</code>
注意: 確保在事務配置中停用嚴格模式以允許獨立事務群組,如下所示提供的解決方案中提到。
替代方案解決方案:
或者,您可以定義一個自訂交易類別來處理錯誤擷取和自動回滾。這種方法可以為所有事務提供中央錯誤處理。
以上是如何在 CodeIgniter 中處理外部函數內的事務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!