1

将尝试使这尽可能简单。我在函数中使用 throw/catch。该函数接受名称、描述和用户数组。它将名称和描述添加到一个表中,然后获取用户数组,并执行一个单独的函数将它们添加到连接器表中。我将功能设置为关闭自动提交,直到输入最后一个用户然后提交。问题是,如果其中一个用户未能进入(由于外键约束),则不会退出事务。我正在调用单独的函数这一事实是否会“重置”自动提交并导致它无法按预期工作?通过将回滚放在 Catch 子句中,我做错了吗?

try
{
    autocommit=0
    run insert query
    if query fails: throw error, rollback
    else
      for count of array
        run another function (this function does more SQL and throws its own errors if it fails)

    autocommit=1
}

catch
{
    rollback, autocommit=1;
    display error
}

希望我没有过度简化代码。任何帮助,将不胜感激。

4

1 回答 1

0
$this->dbh->beginTransaction();
try {
    // do stuff

    $this->dbh->commit();
} catch (PDOException $e) {
    $this->dbh->rollBack();
    throw $e;
}
于 2012-12-19T04:26:44.420 回答