MySqli没有适当回滚

时间:2012-04-25 01:28:49

标签: php mysqli

我在mysqli下有一个列为$db的数据库。这个数据库包含在两个表中,我在下面列为tabletable2(仅适用于此示例)。 Table2的行需要表中的id。这很好,但是将列添加到table2中可能会出现问题,因此需要回滚例程。但是,它似乎没有起作用。

我开始关闭自动提交。然后我尝试输入rollback命令,即使我使用die命令发出故障信号。就我而言,交易可能会在中期操作中被遗忘,数据库应该仍然稳定。所以我不确定这里发生了什么,除非数据库完全忽略了我试图关闭自动提交的事实。

我的代码的基本结构如下:

function problem($str)
{
    global $db;
    mysqli_rollback($db);
    die($str);
}

mysqli_autocommit($db,false);

//Basic check if exists
$sqlstr = "SELECT * FROM table WHERE name = '$name';";
$r = mysqli_query($db,$sqlstr);
if (mysqli_num_rows($r)>0){problem("A row already exists under that id");}

//Insert the row
$sqlstr = "INSERT INTO table (name,v1,v2,v3) VALUES ('$name','$v1','$v2','$v3');";
$r = mysqli_query($db,$sqlstr);
if (!$r){problem("Could not insert into the table. $sqlstr");}

//Get the generated id part 1
$sqlstr = "SELECT id FROM table WHERE name = '$name';";
$r = mysqli_query($db,$sqlstr);
if (!$r){problem("Could not add into the table. $sqlstr");}

//Get the generated id part 2
$row = mysqli_fetch_assoc($r);
$eid = $row['id'];

//A simple loop
$count = count($questions);
for ($i=1;i<=$count;$i++)
{
    //This is where it typically could die.
    $r = mysqli_query($db,"INSERT INTO table2 VALUES (...);");
    if (!$r){problem("Could not add to the table2. $sqlstr");}
}

mysqli_commit($db);

我有什么遗失的吗?我试着尽可能地遵循我为自动提交找到的例子。

1 个答案:

答案 0 :(得分:1)

事务仅在表引擎支持它们时起作用,例如InnoDB的。