0

这行得通吗?我会对其进行测试,但我不知道如何使事情中途崩溃。

$db = DB::getDB();
try{
    $db->begintransaction();
    Invoice::saveInvoice($info, $db);
    InvoiceDetails::saveDetails($moreInfo, $db);
    $db->commit();
}catch(Exception $e){
    $db->rollback();
}

如果它确实有效,除了做一些导致隐式提交的事情之外,还有什么可以咬我的屁股吗?

4

1 回答 1

2

我唯一要做的就是修复你的异常处理。例如

catch (Exception $e) {
    $db->rollback();
    throw $e;
}

这样做可以让您安全地回滚事务,并让错误在您的应用程序中进一步冒泡。

您甚至可以PDOException用您选择的一个来包装内部异常(可能是 a ),例如

$db->rollback();
throw new RuntimeException('Error saving invoice details', 0, $e);

“半途而废”,只需在您的一种方法中抛出异常save*,例如

throw new Exception('KA-BLAM!');
于 2013-10-07T05:02:31.733 回答