PHP事务没有回滚

PHP事务没有回滚,php,mysql,transactions,Php,Mysql,Transactions,我有一些PHP代码,可以使用PHPExcel读取电子表格,并将数据导入MySQL数据库。innoDB如果导入在数据库中遇到重复的记录,它将失败并回滚所有以前的插入。回滚不起作用,我编写了这个小程序,它的功能与此相同 $conn = null; try { $conn=new mysqli("myServer","user","password", "moveforward"); $conn->autocommit(FALSE); $sql="insert into series (se

我有一些PHP代码,可以使用PHPExcel读取电子表格,并将数据导入MySQL数据库。innoDB如果导入在数据库中遇到重复的记录,它将失败并回滚所有以前的插入。回滚不起作用,我编写了这个小程序,它的功能与此相同

$conn = null;
try {

$conn=new mysqli("myServer","user","password", "moveforward");
$conn->autocommit(FALSE);

$sql="insert into series (seriesLocation,seriesName,seriesDate) values('1','2','2013-05-21')";
echo "Executing query 1<br>";
$conn->query($sql);
if($conn->error!="") {
    $sqlError=$conn->error;
    $conn->rollback();
    echo "Rollback complete<br>";
    throw new Exception($sqlError);
}

//This will throw a duplicate exception
echo "Exceuting query 2<br>";
$conn->query($sql);
if($conn->error!="") { 
    $sqlError=$conn->error;
    $conn->rollback();
    echo "Rollback complete<br>";
    throw new Exception($sqlError);
}
echo "You shouldn't be here<br>";

$conn->commit();
echo "Transactions comitted<br>";

} catch (Exception $e) {
    echo "Exception: " . $e->getMessage() . "<br>";
}
$conn->close();
echo "Done<br>";
然而,当我检查数据库时,第一次插入的数据就在那里


有什么想法吗?

我猜您的表格没有使用合适的引擎

此函数不适用于MyISAM或ISAM等非事务性表类型


但是,根据正确的行为,使用INSERT IGNORE或REPLACE要容易得多。在这种情况下,重复的行将被静默忽略或替换现有的行。当然,如果您想知道哪些是重复的,这是行不通的。

猜您的表没有使用合适的引擎

此函数不适用于MyISAM或ISAM等非事务性表类型


但是,根据正确的行为,使用INSERT IGNORE或REPLACE要容易得多。在这种情况下,重复的行将被静默忽略或替换现有的行。当然,如果你想知道哪些是重复的,这是行不通的。

默认存储引擎设置为innodb…还有什么我需要做的吗?看看表真正运行的是什么。有一个很好的机会,他们使用同一个引擎作为一个定义为默认,但我自己会看看它;就这样。我从未意识到你可以这样混搭。我改了,现在它工作得很好。非常感谢。默认的存储引擎设置为innodb…我还需要做些什么吗?看看表真正运行的是什么。有一个很好的机会,他们使用同一个引擎作为一个定义为默认,但我自己会看看它;就这样。我从未意识到你可以这样混搭。我改了,现在它工作得很好。非常感谢。
Executing query 1
Exceuting query 2
Rollback complete
Exception: Duplicate entry '2' for key 'seriesName'
Done