ホームページ >データベース >mysql チュートリアル >Codeigniter トランザクション内の外部関数のエラーがロールバックをトリガーしないのはなぜですか?

Codeigniter トランザクション内の外部関数のエラーがロールバックをトリガーしないのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-03 04:53:30632ブラウズ

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 はすべてのトランザクションを厳密モードで実行します。厳密モードが有効な場合、トランザクションのいずれかのグループが失敗すると、すべてのグループがロールバックされます。厳密モードが無効な場合、各グループは独立して処理されます。つまり、1 つのグループでの障害が他のグループに影響を与えることはありません。
  • エラーが発生した場合、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。