ホームページ > データベース > mysql チュートリアル > 外部関数を呼び出すときに CodeIgniter でトランザクションを確実にロールバックするにはどうすればよいですか?

外部関数を呼び出すときに CodeIgniter でトランザクションを確実にロールバックするにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-03 05:55:30
オリジナル
269 人が閲覧しました

How to Ensure Transaction Rollback in CodeIgniter When Calling External Functions?

CodeIgniter トランザクション

CodeIgniter トランザクションは、単一トランザクションの一部として複数のデータベース操作を実行するメカニズムを提供します。これにより、すべての操作が正常に完了するか、エラーが発生した場合はすべてロールバックされることが保証されます。

このシナリオでは、トランザクション ブロック内で外部関数を呼び出していますが、これらの関数でエラーが発生した場合、トランザクションは実行されません。必要に応じてロールバックします。これは、外部関数がトランザクション状態にアクセスできないためです。

解決策の 1 つは、外部関数でエラーをキャッチし、必要に応じて手動でロールバックを実行することです。例:

<code class="php">try {
    $this->db->trans_start();
    $this->utils->insert_function($data);
    $this->utils->update_function2($test);
    $this->db->trans_complete();
} catch (Exception $e) {
    $this->db->trans_rollback();
}</code>
ログイン後にコピー

ただし、より堅牢な解決策は、データベース操作を個々のモデル メソッド内にカプセル化することです。これにより、より適切な組織化と一元的なエラー処理が可能になります。この場合、insert_function 関数と update_function2 関数をモデルに移動し、モデル メソッド内でトランザクションを処理できます。

TransactionExampleModel.php

<code class="php">class TransactionExampleModel extends CI_Model {
    public function insertData($data) {
        $this->db->trans_start();
        $this->db->insert('table_name', $data);
        if ($this->db->trans_status() === FALSE) {
            $this->db->trans_rollback();
            return FALSE;
        }
        $this->db->trans_commit();
        return TRUE;
    }

    public function updateData($data, $id) {
        $this->db->trans_start();
        $this->db->where('id', $id);
        $this->db->update('table_name', $data);
        if ($this->db->trans_status() === FALSE) {
            $this->db->trans_rollback();
            return FALSE;
        }
        $this->db->trans_commit();
        return TRUE;
    }
}</code>
ログイン後にコピー

次に、コントローラーでは、トランザクション ブロック内でモデル メソッドを呼び出すことができます。

<code class="php">$this->load->model('TransactionExampleModel');

$this->db->trans_start();
$result1 = $this->TransactionExampleModel->insertData($data);
$result2 = $this->TransactionExampleModel->updateData($test, $id);
$this->db->trans_complete();</code>
ログイン後にコピー

このアプローチにより、CodeIgniter アプリケーションでトランザクションを管理するための、より集中化された堅牢な方法が提供されます。

以上が外部関数を呼び出すときに CodeIgniter でトランザクションを確実にロールバックするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート