概要
PHPのオブジェクト型(PDO)でMySQLのトランザクションを確認。
トランザクション中の動作はデータベースステートメントには設定されるが、トランザクション終了後のコミット/ロールバックによって設定結果がデータベースに反映されるかどうかが決まる。
確認コード
- 5行目でトランザクションでコミットフラグを
true
にセット - 通常モードで’one’を書き込み
- 14行目でトランザクション開始
- ‘two’, ‘three’を書き込み
- 25行目でコミット、トランザクション確定
- 通常モードへは自動的に復帰
確認結果
以下、出力を見ながらトランザクションの動作を確認。
- 通常モードでは普通に書き込み
- トランザクション開始後、データベースステートメントの内容は指示通り設定
- トランザクション終了後、データベース内容の変更が確認できる
- 通常モード復帰後も普通に書き込み
以下は出力結果で、終了後のデータベースの内容は’one’, ‘two’, ‘three’, ‘four’となる。
次にコミットフラグを$commit=false
にすると、commit()
メソッドではなくrollback()
メソッドが実行され、実行結果は以下のようになる。
- 通常モードで普通に’one’が書き込まれる
- トランザクションに入り、データベースステートメントには’two’, ‘three’が設定される
- トランザクション終了後にロールバックされると、データベースステートメントがデータベースに反映されてもトランザクション中の’two’, ‘three’は書き込まれない
- 通常モードに復帰後’four’が書き込まれる