【发布时间】:2020-11-17 06:12:29
【问题描述】:
假设我有一个修改数据库的函数。这可以是从一个查询到事务中的多个查询的任何地方。在任何这些修改中,我们都希望确保所有查询都成功。感谢交易,如果其中一个失败,我有办法确保没有任何更改是永久性的。
现在假设我还需要写入一个日志以记录更改。我怎样才能确保进行了修改并写入了日志?
我总是可以在其中任何一个上执行try/catch,但例如说我的查询成功但我的日志不成功。然后我怎样才能返回并撤消对数据库的所有修改?
这样的做法是否有效和/或可取?
try {
$db->connect();
$db->mysqli->begin_transaction();
// series of queries
...
// log to file
$db->mysqli->commit();
} catch (exception $e) {
$db->mysqli->rollback();
$db->mysqli->close();
}
想记录下我在测试时观察到的一些行为。如果将commit()放在日志之前,即使在记录时捕获到异常,数据库更改也不会回滚。
【问题讨论】:
-
只要您的日志记录函数在/如果它在
// log to file位失败时抛出异常,这应该可以正常工作。使用它我不会看到任何问题。
标签: php exception mysqli transactions