※ ChatGPTを利用し、要約された質問です(原文:PHP+MySQLでrollback出来ない)
PHP+MySQLでrollback出来ない
このQ&Aのポイント
PHP5とMySQL5の環境で、rollbackが正常に動作しない問題が発生しています。
具体的には、ソースコードを実行した後、phpMyAdminで対象テーブルを確認すると、データが登録されてしまっています。
原因が分かる方がいらっしゃいましたら、教えていただけると助かります。
PHP5 + MySQL5環境です。
以下のようなソースでロールバックさせたいのですが、
実行後、「phpMyAdmin」というDB操作ツールで対象テーブルを見てみると
データが登録されてしまっています。(ロールバック出来ていない!?)
どなたか原因がお解りでしたらご教授の程宜しくお願い致します。m(_ _)m
※ソースが見難いので、画像で見やすいものを添付します。
※尚、catch句のデバッグは「bool(true) ロールバック実行」と返ってきます。
//***メイン処理ソース*****************************
$sObj = new SQL_Controller();
$res = $sObj->tran_start();
if(!$res) exit;
try{
//DB登録------------------
$res1 = $sObj->Customer_mst_Insert($_SESSION['CustomerInfo']);
if(!$res1) throw new Exception("Customer_mst_Insert error");
throw new Exception("★rollbackテストの為、ここでワザとthrowしてみる★");
//コミット------------------
$sObj->tran_commit();
} catch(Exception $e) {
//異常時はロールバックする--
$res = $sObj->tran_rollback();
var_dump($res);
echo "ロールバック実行";
}
//***↑メイン処理終わり。以下クラス。*****************************
class SQL_Controller extends MySQL{
}
class MySQL{
function query($sql){
//クエリ実行
return mysql_query($sql);
}
function tran_start(){
//■トランザクション開始------
try{
$res = $this->query("set autocommit = 0");
if(!$res) throw new Exception();
$res = $this->query("begin");
if(!$res) throw new Exception();
} catch(Exception $e) {
return false;
}
return true;
}
function tran_commit(){
//■コミット------
return $this->query("commit");
}
function tran_rollback(){
//■ロールバック------
return $this->query("rollback");
}
}
お礼
回答ありがとうございます! >MySQLはデフォルトだと、MyISAMにしますが、これはトランザクションをサポートしていません。 知らなかったです・・ InnoDBに切り替えを検討します。 ありがとうございました。