[英]Trouble using MySQL transactions with loops in PHP
我試圖建立一個MySQL事務,以便我可以遍歷一堆查詢(見下文),如果其中任何一個失敗,則回滾所有更改。 但是,我發現如果失敗,則不會回滾所有查詢。 我在這里做錯什么嗎?
mysql_query("START TRANSACTION");
foreach($array1 as $arr){
// loop SQL query
if(mysql_error()){
$failed = "...";
}
}
foreach($array2 as $arr){
// loop SQL query
if(mysql_error()){
$failed = "...";
}
}
if(isset($failed)){
mysql_query("ROLLBACK");
} else {
mysql_query("COMMIT");
}
謝謝!
原因是如果查詢失敗(由於錯誤),事務將自動回滾並終止。 因此,如果查詢失敗,您應該停止循環,因為在查詢失敗后執行的所有操作都會自動提交(或者如果AUTOCOMMIT
關閉,則至少在另一個事務中)...
您使用的是交易安全表類型嗎? 默認的MyISAM不支持事務,我建議使用InnoDB。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.