Mysqli :: commit()返回false,但没有错误消息

时间:2014-02-13 10:56:50

标签: php sql mysqli commit

我在try / catch块中有三个sql查询。 Autocommit是关闭的,所有三个查询都运行没有错误,我已经验证了(如果任何查询失败,它不应该到达提交行,但我已经通过xdebug验证它,一次一行地执行代码)。当代码到达commit()函数调用时,mysqli返回false,但没有错误消息。当先前的查询全部有效时,如何提交失败?

这基本上是代码的外观:

try{
    $mysqli->autocommit(false);

    $sql1 = "insert into...";
    $mysqli->query($sql); // Works!
    if($mysqli->error)
    {
        $mysqli->rollback();
        throw new Exception....
    }


    $sql2 = "insert into...";
    $mysqli->query($sql); // Works!
    if($mysqli->error)
    {
        $mysqli->rollback();
        throw new Exception....
    }


    $mysqli->commit(); // Fail

}

1 个答案:

答案 0 :(得分:0)

检查: $mysqli->begin_transaction(MYSQLI_TRANS_START_READ_WRITE);(当然,如果你想在表中编写/插入)

尝试按照以下步骤进行调试: [ - 启动交易代码 - ]

$ q2 = $ mysqli-> query($ query2); //查询内部交易

print' q2:'。$ mysqli->错误;

[ - commit / rollback condition / code --------]

您可能会收到此错误消息: "无法在READ ONLY事务中执行语句。" - > 将begin transaction的参数更改为MYSQLI_TRANS_START_READ_WRITE

还要检查是否为要使用事务的表设置了innoDB引擎。

您还可以在事务块之外测试查询,以确保它们没有错误。