Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySql PDO开始事务并将其传递给对象_Php_Mysql_Pdo - Fatal编程技术网

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例外,好主意。谢谢明白了,菲尔。谢谢虽然如果我开始有数据完整性问题,我会直接告诉你,‘菲尔说我可以这样做’