Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MYSQL在使用多个函数时自动提交_Php_Mysql_Transactions_Autocommit - Fatal编程技术网

Php MYSQL在使用多个函数时自动提交

Php MYSQL在使用多个函数时自动提交,php,mysql,transactions,autocommit,Php,Mysql,Transactions,Autocommit,我会尽量让这件事变得简单。我在函数中使用了throw/catch。该函数接受名称、描述和用户数组。它将名称和描述添加到一个表中,然后获取用户数组,并执行单独的函数将用户添加到连接器表中。我将函数设置为关闭自动提交,直到输入最后一个用户,然后提交。问题是,如果其中一个用户由于外键约束而无法进入,则不会退出事务。我调用一个单独的函数是否会重置自动提交并导致它无法按预期工作?我把回滚放在Catch子句中是不是做错了 try { autocommit=0 run insert query

我会尽量让这件事变得简单。我在函数中使用了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
}

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

这正是我正在做的。区别在于,在“try”语句中,我调用了另一个执行更多SQL的函数。该函数在爆炸时会抛出自己的错误。该函数将在try语句中多次被调用。如果其中一个调用失败,我希望整个事务回滚,但事实并非如此。我在一个粘贴站点上抛出了这两个有问题的函数。也许这将进一步解释:更新:通过将另一个函数运行的代码移动到主函数中,它可以工作。按照这个逻辑…调用另一个函数重置自动提交?
$this->dbh->beginTransaction();
try {
    // do stuff

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