【PHP+MySQL】トランザクション構文の基礎

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

http://open-groove.net/mysql/autocommit/

http://dbinfo.sakura.ne.jp/?contents_id=132

カテゴリー: PHP, SQL パーマリンク

コメントを残す

メールアドレスが公開されることはありません。