トランザクション処理を使用する場合、データベース エンジンはトランザクション処理をサポートする必要があります。たとえば、MySQL の MyISAM はトランザクション処理をサポートしていないため、InnoDB エンジンを使用する必要があります。
ThinkPHP5.0
トランザクション メソッドを使用してデータベース トランザクションを操作します。例外が発生すると、自動的にロールバックされます。例:
トランザクションを自動的に制御する処理
Db::transaction(function(){ Db::table('think_user')->find(1); Db::table('think_user')->delete(1);});
たとえば、トランザクションを手動で制御することもできます。
// 启动事务Db::startTrans();try{ Db::table('think_user')->find(1); Db::table('think_user')->delete(1); // 提交事务 Db::commit(); } catch (\Exception $e) { // 回滚事务 Db::rollback();}
ThinkPHP5.1
最も簡単な方法は、トランザクション メソッドを使用してデータベース トランザクションを操作します。クロージャ内のコードが実行されると、例外が自動的にロールバックされます。例:
Db::transaction(function () { Db::table('think_user')->find(1); Db::table('think_user')->delete(1);});
トランザクションを手動で制御することもできます。例:
// 启动事务Db::startTrans();try { Db::table('think_user')->find(1); Db::table('think_user')->delete(1); // 提交事务 Db::commit();} catch (\Exception $e) { // 回滚事务 Db::rollback();}
トランザクション中は次の点に注意してください。操作を行う場合は、データベース接続が同じ接続を使用していることを確認してください。
V5.1.13 以降、MySQL の XA トランザクションをサポートしてグローバル (分散) トランザクションを実装できるようになりました。使用できるのは:
Db::transactionXa(function () { Db::connect('db1')->table('think_user')->delete(1); Db::connect('db2')->table('think_user')->delete(1);}, [Db::connect('db1'),Db::connect('db2')]);
データ テーブル エンジンが InnoDB であることを確認し、XA トランザクションを有効にするサポート。
以上がThinkPHP5 でのトランザクション操作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。