【发布时间】:2014-11-27 14:56:41
【问题描述】:
我有一个方法 deleteUser(..) 执行一个 mysql 查询并调用另一个方法 logAction(..) 调用另一个 mysql 查询。
在这些方法中处理事务的最佳方式是什么?
示例伪代码:
function deleteUser($userId) {
$db->execute('BEGIN TRANSACTION');
$userCount = $db->execute("DELETE FROM users WHERE id=$userId");
logAction('USER DELETED');
$db->execute('INSERT INTO ... another action');
$db->execute('COMMIT');
}
function logAction($action) {
$db->execute('BEGIN TRANSACTION');
$db->execute('INSERT INTO logtable ... ACTION');
if (error) {
$db->execute('ROLLBACK');
}
$db->execute('COMMIT');
}
如您所见,我从 deleteUser() 方法调用 logAction,并遇到了两次“BEGIN TRANSACTION”。在 deleteUser() 完成之前,方法 logAction() 过早地调用了“COMMIT”。
有没有办法在这种嵌套方法中管理事务?
【问题讨论】:
标签: php mysql transactions