2011-10-27 4 views
0

のbeginTransaction()および(コミット)

try{ 
$db->beginTransaction(); 
$handler = $db->prepare(...); 
$handler->execute() 
$query2 = "INSERT INTO..."; 
$db->exec($query2); 
$db->commit(); 
}catch (PDOException $e) { 
try { $db->rollBack(); } catch (Exception $e2) {} 
} 

私の質問はあるが、rollBack()ロールバックに、​​とexec()の両方によって引き起こされるすべての変更をしますか? exec()を使用する理由は、$query2を動的に作成しなければならず、この方法では私にとってははるかに簡単です。

答えて

1

トランザクションの開始からロールバックを実行するまでの間に実行される操作はすべて元に戻されます。どのようにそれらの操作を行ったかは関係ありません - それらはロールバックされます。

もちろん、これはトランザクション対応データベース/テーブルを使用していることを前提としています。たとえば、MySQLのMyISAMテーブルでexec()が、InnODBテーブルでexecute()が実行された場合、InnoDBオペレーションはロールバックされますが、MyISAMには固執しています。

関連する問題