已有活跃交易

mic*_*ics 4 php pdo

我有一个使用提交和回滚的代码

$pdo = new dbpdo();
    $fields = ['id','last','first'];
    $values = [NULL,'asd','asd'];
    //$pdo->db->beginTransaction();
    try {
        $pdo->db->beginTransaction();
        //echo 'connected';
        //$pdo->InsertBatch('staff',implode(',',$data));
        //$pdo->InsertBatch('staff',implode(',',$fields), implode(',',$values));
        $pdo->InsertBatch('staff',$fields, $values);
        //$pdo->exec("INSERT INTO staff('id','first','last') VALUES ('NULL','asd','asd')");
        //$pdo->execute();
        $pdo->commit();
        //$message = 'success';
        echo 'Save';
    } catch (Exception $e) {
        //die("Unable to connect: " . $e->getMessage());
        $pdo->rollBack();
        //$message = 'sayop';
        //die("Unable to connect: " . $e->getMessage());
        echo "Failed: " . $e->getMessage();
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是。当我执行这个时。。是说。已经有一个活动事务,并且数据尚未保存在数据库中。。dbpdo 类扩展了 PDO 类。

小智 5

我今天在这里遇到了同样的情况...我试图在 Firebird 中插入一些主从记录,并得到There is already an active transaction错误。

我的解决方案是启用和禁用自动提交选项,请尝试以下操作:

$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 0)

打电话之前$pdo->db->beginTransaction()

当您完成交易时,重新启用自动提交:

$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 1)

参考: http://php.net/manual/pt_BR/pdo.begintransaction.php#113602