PHP ADOdb不尊重autoCommit = false

时间:2014-04-23 22:52:11

标签: php transactions commit adodb autocommit

我有以下代码

<?php
include("adodb5/adodb.inc.php"); // includes the adodb library

$db = NewADOConnection('mysql'); // A new connection
$conn = $db->Connect("localhost", "test", "password", "test_db");

if(!$conn){
  echo 'failed to connect'; die();
}else{

    $db->autoCommit = false;
    $db->StartTrans();

    $statement1 = $db->Prepare("insert into table1 (cod) values (1)");
    $ok1 = $db->Execute($statement1);

    $statement2 = $db->Prepare("insert into table2AAAAA (cod) values (1)");
    $ok2 = $db->Execute($statement2);

    $statement3 = $db->Prepare("insert into table3 (cod) values (1)");
    $ok3 = $db->Execute($statement2);

    if(!$ok1){
        echo 'Failed 1';
        $db->FailTrans();
    }else if(!$ok2){
        echo 'Failed 2';
        $db->FailTrans();
    }else if(!$ok3){
        echo 'Failed 3';
        $db->FailTrans();
    }else if($ok1 && $ok2 && $ok3){ //ONLY IF ALL ARE OK THEN COMMIT
        $db->CompleteTrans();
    }

}
?>

我在$ statement2上强制出错,当我运行代码时,我得到了“失败2”。作为输出,但问题是执行$ statement1并将记录插入数据库。

我想要的只是声明只有在所有声明都没有失败的情况下才能提交。 $ db-&gt; autoCommit = false; - 似乎没有工作吗?

如果您能指出我的解决方案,我会感激不尽。 感谢

1 个答案:

答案 0 :(得分:0)

请注意,$ autoCommit变量被标记为“私有,不要修改”:

https://github.com/ADOdb/ADOdb/blob/master/adodb.inc.php#L433

ADODB的“mysql”驱动程序似乎根本没有任何交易支持;如果您使用的是更新版本,ADODB的“mysqli”驱动程序支持BeginTrans(),CommitTrans()和co;有关这些功能的文档,请参阅http://adodb.sourceforge.net/docs-adodb.htm#starttrans