Php MySQL:PDO事务无法正常工作
所以我在PDO中使用事务时遇到了问题。我正在做一个快速测试:Php MySQL:PDO事务无法正常工作,php,mysql,pdo,transactions,Php,Mysql,Pdo,Transactions,所以我在PDO中使用事务时遇到了问题。我正在做一个快速测试: <?php include_once "./init.php"; $sql = "insert into tbTest(cValue) values('1');"; $sttmt = $db->prepare($sql); $sttmt->execute(); $sql = "SET autocommit=0;"; $sttmt = $db->prepare($sql); $sttmt->execu
<?php
include_once "./init.php";
$sql = "insert into tbTest(cValue) values('1');";
$sttmt = $db->prepare($sql);
$sttmt->execute();
$sql = "SET autocommit=0;";
$sttmt = $db->prepare($sql);
$sttmt->execute();
$db->beginTransaction();
$sql = "SET autocommit=0; insert into tbTest(cValue) values('2');";
$sttmt = $db->prepare($sql);
$sttmt->execute();
$db->rollBack();
$db->beginTransaction();
$sql = "SET autocommit=0; insert into tbTest(cValue) values('3');";
$sttmt = $db->prepare($sql);
$sttmt->execute();
$db->rollBack();
?>
正如Nigel Ren所指出的,问题在于设置自动提交。MyISAM表无法管理事务。当我的表是MyISAM时,我添加了set autocommit作为测试的一部分,但当我切换到InnoDB时忘记删除它 有效的版本:
<?php
//not in a transaction
$sql = "insert into tbTest(cValue) values('1');";
$sttmt = $db->prepare($sql);
$sttmt->execute();
$db->beginTransaction();
$sql = "insert into tbTest(cValue) values('2');";
$sttmt = $db->prepare($sql);
$sttmt->execute();
$db->rollBack();
$db->beginTransaction();
$sql = "insert into tbTest(cValue) values('3');";
$sttmt = $db->prepare($sql);
$sttmt->execute();
$db->commit();
//not in a transaction
$sql = "insert into tbTest(cValue) values('4');";
$sttmt = $db->prepare($sql);
$sttmt->execute();
$db->beginTransaction();
$sql = "insert into tbTest(cValue) values('5');";
$sttmt = $db->prepare($sql);
$sttmt->execute();
$db->rollBack();
//not in a transaction
$sql = "insert into tbTest(cValue) values('6');";
$sttmt = $db->prepare($sql);
$sttmt->execute();
?>
尝试删除设置自动提交=0代码>从INSERT语句中,这应该包含在beginTransaction()
omg。。。是的,你是对的。当我第一次看这个的时候,我已经把设置自动提交了。我的表是MyISAM表,我不知道它不能参与事务。我把布景自动提交放回去了。然后在我写这个问题之前,我把它切换到InnoDB,但是离开了AUTCOMIT。我花了点时间调试它,但现在一切都好了。谢谢!