【问题标题】:MYSQL Autocommit when using multiple functions使用多个函数时的 MYSQL 自动提交
【发布时间】:2012-12-06 05:40:53
【问题描述】:

会尽量简化。我在函数中使用 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
}

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

【问题讨论】:

  • 更新:通过将其他函数运行的代码移动到主函数中,它可以工作。按照这个逻辑......调用另一个函数会重置自动提交?

标签: php mysql transactions autocommit


【解决方案1】:
$this->dbh->beginTransaction();
try {
    // do stuff

    $this->dbh->commit();
} catch (PDOException $e) {
    $this->dbh->rollBack();
    throw $e;
}

【讨论】:

  • 这就是我正在做的事情。不同之处在于,在“try”语句中,我调用了另一个执行更多 SQL 的函数。该函数在爆炸时会抛出自己的错误。该函数将在 try 语句中多次调用。如果其中一个调用失败,我希望整个事务回滚,但事实并非如此。我已经在粘贴网站上抛出了有问题的 2 个函数。也许这会进一步解释:pastie.org/5553135
猜你喜欢
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
  • 2011-06-29
  • 2017-12-27
  • 1970-01-01
  • 2020-01-25
相关资源
最近更新 更多