-1

トランザクションを開始し、コミットで終了するとします。

$db->beginTransaction();
// sql insert
// another sql insert
// a sql update
// another sql update
$db->commit();

beginTransaction と commit() の間で行われたすべての変更を元に戻すために commit() の後に実行できる関数はありますか?

4

2 に答える 2

1

コミット後、元に戻すために変更を元に戻すことはできませんrollback。代わりに呼び出す必要があります。

主に、トランザクション内のいずれかのエンティティが失敗した場合に実行されるロールバック アクション。したがって、失敗をキャッチするには、使用する必要がありますtry{}catch{}

$db->beginTransaction();
 try{
         $db->commit();//writes all data to database and reach to new state
 }catch(Exception $e)
  {
      $db->rollback();//roll back all changes made to database 
      echo  $e->getTraceAsString();
 }
于 2013-07-15T11:54:37.773 に答える
0

これにより、現在のトランザクションからの変更が元に戻ります。

$db->rollBack();

ただし、コミット後にロールバックすることはできません。

エラーなどでの挿入を防止しようとしている場合は、次のようにします。

try
{
    $db->beginTransaction();
    // sql insert
    // another sql insert
    // a sql update
    // another sql update
    $db->commit();

}
catch( Zend_Exception $e)
{
    $db->rollBack();
}

エラーがなければコミットし、エラーがあればロールバックします。

于 2013-07-15T12:00:15.050 に答える