Php MySql PDO开始事务并将其传递给对象
这样行吗?我想测试一下,但我不知道如何让事情半途而废Php MySql PDO开始事务并将其传递给对象,php,mysql,pdo,Php,Mysql,Pdo,这样行吗?我想测试一下,但我不知道如何让事情半途而废 $db = DB::getDB(); try{ $db->begintransaction(); Invoice::saveInvoice($info, $db); InvoiceDetails::saveDetails($moreInfo, $db); $db->commit(); }catch(Exception $e){ $db->rollback(); } 如果它真的起作用了
$db = DB::getDB();
try{
$db->begintransaction();
Invoice::saveInvoice($info, $db);
InvoiceDetails::saveDetails($moreInfo, $db);
$db->commit();
}catch(Exception $e){
$db->rollback();
}
如果它真的起作用了,除了做一些导致隐式提交的事情之外,还有什么会对我不利的吗?我唯一要做的就是修复异常处理。比如说
catch (Exception $e) {
$db->rollback();
throw $e;
}
这样做可以让您安全地回滚事务,并让错误在应用程序中进一步冒泡
您甚至可以使用您选择的一种方法包装内部异常(可能是PDOException
),例如
$db->rollback();
throw new RuntimeException('Error saving invoice details', 0, $e);
要“中途崩溃”,只需在一个save*
方法中抛出一个异常,例如
throw new Exception('KA-BLAM!');
您在
catch
语句中遗漏了异常,但除此之外,我认为这很好。要使事情崩溃,只需抛出一个异常,例如抛出新异常('KA-BLAM!')代码>@Phil我添加了捕获异常的代码,这就是为什么我使用IDE,否则我将无法运行一行代码。我甚至没有想到KA-BLAM例外,好主意。谢谢明白了,菲尔。谢谢虽然如果我开始有数据完整性问题,我会直接告诉你,‘菲尔说我可以这样做’