PDOでトランザクション処理を行う[beginTransaction]

2016年2月16日

PHP

トランザクションは、データベースに対する一連の処理(SQL)の整合性を保つための機能です。複数の処理を一つのまとまった処理として扱うので、一つでも処理が失敗すれば、その全ての処理を無効とすることができます。

 

 

スポンサーリンク

 

 

全ての処理が成功し、データベースに反映させることをコミットと呼びます。また、もし途中で処理が失敗すれば、トランザクション内の処理は全て無効とします。これをロールバックと呼びます。

 

今回は下記のnameテーブルを対照にトランザクション処理を行っています。

MySQLにつないでテーブルデータを表示させる[SELECT][PDO]

 

テーブルタイプはInnoDBを設定しています。MyISAM形式はトランザクション機能がないので注意して下さい。

 

 

18行目

setAttribute()関数でPDOExceptionを投げるようにしておきます。

 

もし途中の処理でエラーが発生すると、34行目においてロールバック処理が行われます。試しに27行目において存在しないnamesカラムを指定して、わざとエラーを発生させるようにしています。この場合、もちろん上記2つのinsert処理は実行されません。

 

21行目

トランザクション処理が行われると、データベースへの処理は29行目のcommit()が呼ばれるまでは、実際に反映されません。

 

 

参照ページ


PHPマニュアル

PDO::beginTransaction

トランザクションおよび自動コミット

PDO::commit

 

 

 

LINEで送る
Pocket

Copyright © 2019 思考の葉 All Rights Reserved.  プライバシーポリシー