gpt4 book ai didi

php - 我的 PDO 事务没有提交,但也没有抛出任何异常

转载 作者:行者123 更新时间:2023-11-29 01:05:44 25 4
gpt4 key购买 nike

我有一些查询到目前为止运行良好,但我想将它们包装在一个事务中以减少数据损坏的可能性。运行代码后,一切似乎都可以正常工作(即没有抛出异常),但查询永远不会提交给数据库。我看过 S.O. 上的其他问题。但我还没有发现任何适用于我的情况。

这是我的代码:

    db::$pdo->beginTransaction();  // accesses PDO object method

try {

$sql = "INSERT INTO expenses SET date=:date, amount=:amount, accountId=:account; ";

$sql .= "UPDATE accounts SET balance = balance - :amount WHERE id = :account";


$s = db::$pdo->prepare($sql);
$s->bindValue(':date', $date);
$s->bindValue(':amount', $amount);
$s->bindValue(':account', $account);

$s->execute();

db::$pdo->commit();
echo 'success';
}
catch (PDOException $e) {
db::$pdo->rollback();
echo '<p>Failed: ' . $e->getMessage() . '</p>';
}

当我运行代码时,它会输出成功消息,但正如我所说,没有任何内容会提交到数据库。

因为它是相关的,我还应该注意到我的 PDO 错误模式设置为 ERRMODE_EXCEPTION,所以我认为这不是导致问题的原因。我正在运行一个 MySQL 数据库 (InnoDB)

有什么想法吗?

最佳答案

我不完全确定在单个查询语句中运行多个查询是如何工作的(如果它工作的话),因为我通常通过在准备/执行语句中单独运行每个查询来处理事务。事务仍将所有更改排队,直到按预期提交/回滚。根据this SO answer它似乎有效,但是该示例没有绑定(bind)值,因此这可能是另一个问题。

我建议将查询拆分为多个准备/绑定(bind)/执行语句,它应该会按预期工作。

关于php - 我的 PDO 事务没有提交,但也没有抛出任何异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27714410/

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