PEAR DB でトランザクション機能を使う

DBMS として MySQL を使用している場合は、対象テーブルが InnoDB 形式を使用している場合にのみトランザクションが使用できます。

例えば、指定idのデータを
main1_table ⇒ backup1_table
main2_table ⇒ backup2_table
main3_table ⇒ backup3_table
へ複製する場合、途中でエラーが起こった場合に処理を行う直前の状態に戻す方法。

$db->autoCommit(false);

$sql = "INSERT INTO main1_table SELECT * FROM backup1_table WHERE id=".$_POST['id'];
$res1 =& $db->query($sql);
if($db->idError($res1)){
  die($res1->getMessage());
}

$sql = "INSERT INTO main2_table SELECT * FROM backup2_table WHERE id=".$_POST['id'];
$res2 =& $db->query($sql);
if($db->idError($res2)){
  $db->rollback();
  die($res2->getMessage());
}

$sql = "INSERT INTO main3_table SELECT * FROM backup3_table WHERE id=".$_POST['id'];
$res3 =& $db->query($sql);
if($db->idError($res3)){
  $db->rollback();
  die($res3->getMessage());
}

$db->commit();

Leave a Response