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;
}

これを行うと、トランザクションを安全にロールバックするだけでなく、アプリケーションでエラーをさらにバブルさせることができます。

内部例外 (おそらく a PDOException) を選択したものでラップすることもできます。

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

「途中でクラッシュする」には、save*メソッドのいずれかで例外をスローするだけです。

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