[PHP-users 22991]Re: MYSQLトランザクション

Y osaosa acosamu3 @ yahoo.co.jp
2004年 8月 17日 (火) 04:09:25 JST


皆様、たくさんの参考意見本当にありがとうございます。
テーブルのタイプをInnoDBにし、set autocommit=0をして
試してみたのですが、どうにもロールバックできません。

下記ソースなんですが、一番目のSQL文はエラーになるように
作ってあります。
(プライマリキーに重複値をわざと入れるように設定してあり
ます。)
次のsql文は正常に実行できるものです。
本来、一番目のsql文でエラーが起これば、ロールバックして
、二番目のsql文も実行される前の状態になるはずなのに、な
ぜか、ロールバックできずに実行されてしまいます。。。

// DBに接続
$self_url = $_SERVER['PHP_SELF'];
$con = mysql_connect("$db_host", "$db_id", "$db_pass");
if(!$con){
 $error_flg = "1";
 exit;
}
else{ ; }
if(!mysql_select_db("$db_name")){ array_push($e_list,'只
今大変混雑しておりま
す。暫くしてからアクセスしなおして下さい。'); $error_flg =
"1"; }else{ ; }
mysql_query("BEGIN");


//エラーになるSQL文
$sql = "";
$sql = "update faq_cate01 set ";
$sql = $sql."cate_id = '12' ";
$sql = $sql."where cate_id = '11';";
$result01 = mysql_query($sql);
if(!$result01){ $error_flg = "1"; }else{ ; }

//実行可能なSQL文
$sql = "";
$sql = "update ms_info set ";
$sql = $sql."info_cate_id = '999' ";
$sql = $sql."where info_id = '1';";
$result02 = mysql_query($sql);
if(!$result02){ $error_flg = "1"; }else{ ; }


if($error_flg == "1"){
mysql_query("ROLLBACK");
print ("error");
exit;
}else{
mysql_query("COMMIT");
}

mysql_close($con);
print ("success");
exit;



PHP-users メーリングリストの案内