Php MySQL: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

所以我在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->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。我花了点时间调试它,但现在一切都好了。谢谢!