2013-10-07 56 views
0

這是否行得通?我會測試它,但我不知道如何讓事情中途崩潰。MySql PDO開始一個事務並將它傳遞給對象

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

而且如果它的工作是有什麼東西可以咬我,除了做一些導致隱含提交的屁股?

+1

你錯過異常在'catch'聲明,但除此之外,我會說,這是好的。要拋出異常,只拋出一個異常,例如'拋出新的異常('KA-BLAM!');' – Phil

+0

@Pil我添加了捕捉異常,這就是爲什麼我使用IDE或者我不會得到一行代碼跑步。我甚至沒有想到KA-BLAM例外,好想法。謝謝! – Casey

回答

2

我唯一要做的就是修正你的異常處理。例如,

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!'); 
+0

明白了菲爾。謝謝!雖然如果我開始遇到數據完整性問題,我會直接向你指出並說'菲爾說我可以這樣做' – Casey

+0

+1拋出異常_KA-BLAM!_:D –

相關問題