Rumah >pangkalan data >tutorial mysql >Mengapakah ralat dalam fungsi luaran dalam transaksi Codeigniter tidak mencetuskan pemulangan semula?

Mengapakah ralat dalam fungsi luaran dalam transaksi Codeigniter tidak mencetuskan pemulangan semula?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-03 04:53:30632semak imbas

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

Transaksi Codeigniter

Codeigniter menyediakan mekanisme yang lancar untuk mengendalikan transaksi pangkalan data melalui fungsi terbina dalamnya. Ini membolehkan pembangun melaksanakan berbilang operasi pangkalan data sebagai unit kerja atom tunggal.

Penerangan Isu

Walau bagaimanapun, apabila menggunakan transaksi dalam Codeigniter, pembangun mungkin menghadapi isu biasa di mana ralat berlaku dalam fungsi luaran dipanggil dalam blok transaksi jangan mencetuskan pemulangan semula.

Kemasukan Fungsi Luaran

Untuk menangani isu ini, adalah penting untuk memahami bahawa fungsi luaran yang mengandungi operasi pangkalan data harus dirangkumkan dalam model, bukan pengawal. Ini memastikan bahawa interaksi pangkalan data dilaksanakan dalam konteks transaksi.

Sampel Kod dengan Pelaksanaan Berasaskan Model

Pertimbangkan contoh kod berikut:

<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>

Pertimbangan Utama

  • Secara lalai, Codeigniter menjalankan semua transaksi dalam mod ketat. Apabila mod ketat didayakan, jika mana-mana kumpulan transaksi gagal, semua kumpulan akan ditarik balik. Jika mod ketat dilumpuhkan, setiap kumpulan dilayan secara berasingan, bermakna kegagalan dalam satu kumpulan tidak akan menjejaskan yang lain.
  • Fungsi trans_complete() secara automatik melancarkan urus niaga jika ralat berlaku. Sebagai alternatif, pembangun boleh mengendalikan ralat secara manual menggunakan fungsi trans_rollback() dan trans_status().

Kemas Kini Codeigniter 4

Dalam Codeigniter 4, nama fungsi berkaitan transaksi telah berubah sedikit apabila berikut:

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()

Atas ialah kandungan terperinci Mengapakah ralat dalam fungsi luaran dalam transaksi Codeigniter tidak mencetuskan pemulangan semula?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn