0

我有以下代码

<?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->autoCommit = 假;——好像没用?

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

4

1 回答 1

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

于 2014-05-07T21:41:12.033 回答