PHPとMySQLを連携させてデータベースを扱っていると、トランザクションの処理が必要になることがあります。
そこで、ここでは、トランザクション構文の基礎を紹介します。
<?php (接続部分は省略) //オートコミットをオフに設定 $sql = "SET AUTOCOMMIT=0" ; mysql_query($sql) ; //トランザクション開始 $sql = "BEGIN" ; mysql_query($sql) ; //テーブルに挿入 $sql = sprintf('INSERT INTO table SET data="%s"' , $data) ; $res = mysql_query($sql) or die("insert error") ; if ($res) { //コミット $sql = "COMMIT" ; mysql_query($sql) ; echo "成功" ; } else { //ロールバック $sql = "ROLLBACK" ; mysql_query($sql) ; echo "失敗" ; } ?>
基本的に、これでトランザクションが機能します。
注意点としては、データベースの種別に InnoDB などを選択しておくことです。
デフォルトの MyISAM ではトランザクションを利用することはできません。
autocommit というのがよくわからなかったので調べてみました。
InnoDBのデフォルトだとautocommit機能がオンで、commitする前でも、クエリ成功時点で自動的に確定してしまうらしい。
これだとrollbackできないケースが出てくるので、autocommit機能はオフにした方が良いとのこと。
ちなみに、CORESERVERのInnoDBを調べたら、オンになっていました。
(参考)autocommitについて役立つページ
http://redwarcueid.seesaa.net/article/140085587.html