2014-02-13 70 views
1

我在try/catch块中有三个sql查询。 Autocommit已关闭,所有三个查询都运行无误,我已验证(如果有任何查询失败,它不应到达提交行,但我已通过xdebug验证了它,一次只执行一行代码)。当代码到达commit()函数调用时,mysqli返回false,但没有错误消息。如果前面的查询全部正常工作,提交失败怎么办?Mysqli :: commit()返回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 

} 
+0

受影响的表的存储类型是innoDB,对不对? – raina77ow

+1

'$ mysqli-> autocommit(false)'成功了吗?尝试提交后,什么是'$ mysqli-> error'? – Oswald

+1

表是innoDB,是的。 autocommit的作品。 $ mysqli-error是空的,没有错误信息,没有错误代码,什么都没有。 – user3305609

回答

0

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

尝试调试以下步骤: [ - 启动事务代码 - ]

$ Q2 = $ mysqli->查询($ QUERY2); //内部事务查询

print'q2:'。$ mysqli-> error;

[ - 提交/回滚条件/代码--------]

您可能会收到此错误: “不能在只读事务中执行的语句。” - > 将开始事务的参数更改为MYSQLI_TRANS_START_READ_WRITE

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

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

相关问题