我有一个简单的函数,例如
function transfer_money($from, $to, $amount) {
// START TRANSACTION
deduct_money($from, $amount); // already using transaction internally
add_money($to, $amount); // already using transaction internally
// COMMIT;
}
假设函数 deduct_money
和 add_money
已在内部使用事务,我如何用另一个事务包装新函数?
最佳答案
假设您希望两个函数继续按原样使用事务,但希望将整个过程包装在“更高级别”事务中,您可以构建自己的方法/函数来启动和结束事务...例如:
<?php
class Transaction
{
private static $stack = 0;
public static function begin(PDO $adapter)
{
if(self::$stack === 0) {
$adapter->beginTransaction();
}
self::$stack++;
}
public static function commit(PDO $adapter)
{
if(self::$stack === 0) {
throw new Exception('Cannot commit as no transaction has begun');
}
self::$stack--;
if(self::$stack === 0) {
$adapter->commit();
}
}
}
这将允许您“堆叠”事务,并且仅当收到与启动事务的次数相同数量的提交事务的调用时才会提交事务。
关于php - 在 PHP 中重构嵌套 MySQL 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30454266/