gpt4 book ai didi

mysql - PDO 事务提交而不是回滚

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:10 24 4
gpt4 key购买 nike

所以有 2 个 InnoDB 表,employees 和 companies。我使用 try/catch block 在事务中插入 2 个查询。但是,当我在第一个查询中犯了一个明显的错误(我输入了一个不正确的表名,employee 而不是 employees),数据库当然不会为该查询插入行,但是第二个查询运行并提交给数据库而不是回滚(因为第一个查询插入失败)。

结果是一个 emply employees 表,但是 companies 表有新记录。我在这里错过了什么?因为没有插入第一个查询,它不应该回滚吗?

$employee_id = 2;
$employee_name = 'Marky Mark';

try {
$dbh->beginTransaction();
$query = "INSERT INTO employee (employee_name) VALUES (:employee_name)";
$insert_emp = $dbh->prepare($query);
$insert_emp->execute(array(':employee_name' => $employee_name));

$Employee_id = $dbh->lastInsertId();


$query = "INSERT INTO companies (company_name,employee_id) VALUES ('SO',:Employee_id)";
$insert_emp_comp = $dbh->prepare($query);
$insert_emp_comp->execute(array(':Employee_id' => $Employee_id));
$dbh->commit();
} catch (Exception $e) {
$dbh->rollBack();
echo "Failed: " . $e->getMessage();
}

最佳答案

默认情况下,PDO 不会抛出异常。您必须将其配置为抛出异常:

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

查看 this page有关 PDO 如何处理错误的更多信息。

关于mysql - PDO 事务提交而不是回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10146293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com