【发布时间】:2014-12-31 00:06:15
【问题描述】:
到目前为止,我有一些查询运行良好,但我想将它们包装在事务中以减少数据损坏的可能性。运行代码后,一切似乎都可以工作(即没有抛出异常),但查询永远不会提交到数据库。我看过关于 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)
有什么想法吗?
【问题讨论】:
-
只是在黑暗中试一试,但请尝试单独运行查询,看看是否有效。