ご覧のとおり、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>
注: 提供されている説明に従って、独立したトランザクション グループを許可するためにトランザクション構成で厳密モードが無効になっていることを確認してください。 solution.
代替解決策:
あるいは、エラー トラップと自動ロールバックを処理するカスタム トランザクション クラスを定義できます。このアプローチにより、すべてのトランザクションに対する一元的なエラー処理が可能になります。
以上がCodeIgniter の外部関数内でトランザクションを処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。