Masalah:
Transaksi CodeIgniter boleh dipercayai untuk sisipan pangkalan data yang selamat. Walau bagaimanapun, apabila memanggil fungsi luaran dalam sempadan transaksi (trans_start dan trans_complete), operasi pangkalan data dalam fungsi tersebut tidak dikendalikan dalam transaksi. Ini boleh mengakibatkan ralat dan penarikan balik yang tidak lengkap.
Cadangan Penyelesaian:
Untuk menyelesaikan isu ini, kami boleh mengendalikan operasi pangkalan data secara manual dalam fungsi luaran dengan menambahkan semakan balik. dalam setiap fungsi. Jika ralat berlaku, pemulangan semula akan dimulakan.
Kod:
// Function within Model public function insert_function($data) { $this->db->insert('table_name', $data); if ($this->db->error()) { $this->db->trans_rollback(); return false; // Error occurred } return true; // Success } // Calling Function within Transaction in Model $this->db->trans_start(); $result = $this->insert_function($data); if (!$result) { $this->db->trans_rollback(); } $this->db->trans_complete();
Pendekatan Alternatif:
Satu lagi pendekatan adalah untuk melaksanakan logik pengendalian transaksi di luar fungsi dalam sempadan trans_start dan trans_complete. Ini memastikan bahawa sebarang operasi pangkalan data dalam fungsi luaran dikendalikan dalam urus niaga.
Kod:
// Function within Model public function insert_function($data) { $this->db->insert('table_name', $data); } // Calling Function within Transaction in Model $this->db->trans_start(); $this->insert_function($data); if ($this->db->error()) { $this->db->trans_rollback(); } $this->db->trans_complete();
Pertimbangan Penting:
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Transaksi dalam Panggilan Pelbagai Fungsi dalam CodeIgniter?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!