首頁 >資料庫 >mysql教程 >為什麼 Codeigniter 事務中外部函數的錯誤不會觸發回滾?

為什麼 Codeigniter 事務中外部函數的錯誤不會觸發回滾?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-03 04:53:30631瀏覽

Why do errors in external functions within Codeigniter transactions not trigger a rollback?

Codeigniter 事務

Codeigniter 透過其內建函數提供了處理資料庫事務的無縫機制。這允許開發人員將多個資料庫操作作為單一原子工作單元執行。

問題描述

但是,在 Codeigniter 中使用事務時,開發人員可能會遇到一個常見問題,即外部函數發生錯誤在事務區塊內呼叫不會觸發回滾。

外部函數包含

要解決這個問題,重要的是要理解包含資料庫操作的外部函數應該封裝在模型中,而不是控制器。這可確保資料庫互動在交易上下文中執行。

基於模型實現的程式碼範例

考慮以下程式碼範例:

<code class="php">// Model

class YourModel extends CI_Model {

    public function transactionExample($data, $id) {
        
        $this->db->trans_start();

        $this->db->insert('table_name', $data);

        // Updating data
        $this->db->where('id', $id);
        $this->db->update('table_name', $test); 

        $this->db->trans_complete();

        /*Optional*/

        if ($this->db->trans_status() === FALSE) {
            # Something went wrong.
            $this->db->trans_rollback();
            return FALSE;
        } 
        else {
            # Everything is Perfect. 
            # Committing data to the database.
            $this->db->trans_commit();
            return TRUE;
        }
    }
}</code>

關鍵注意事項

  • 預設情況下,Codeigniter 以嚴格模式運行所有事務。當啟用嚴格模式時,如果任何一組事務失敗,則所有群組都會回滾。如果停用嚴格模式,則每個群組都會被獨立處理,這表示一組中的故障不會影響其他群組。
  • 如果發生錯誤,trans_complete() 函數會自動回滾事務。或者,開發人員可以使用 trans_rollback() 和 trans_status() 函數手動處理錯誤。

Codeigniter 4 更新

在 Codeigniter 4 中,與事務相關的函數名稱略有更改,如下所示:

Function Codeigniter 3 Codeigniter 4
Start Transaction trans_start() transBegin()
Complete Transaction trans_complete() transCommit()
Rollback Transaction trans_rollback() transRollback()
Transaction Status trans_status() transStatus()

以上是為什麼 Codeigniter 事務中外部函數的錯誤不會觸發回滾?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn