(15) mysqliでトランザクション

投稿者: | 2016年11月11日

この記事は最終更新から 809日 が経過しています。

やってみたいこと

先に記した「(14) SQLiteでトランザクション」と同じことをMySQLでもやってみる。

トランザクションを使いたい場合、MySQLのDBは InnoDB で作ること。
トランザクションを使わない場合、MyISAM を選んでもよい。
両者のメカニズムの違いはググると情報が得られる。

プログラム作成

  // DB接続
  $cMySQL = new mysqli("localhost", DB_USER, DB_PW, DB_NAME);
  if($cMySQL === FALSE){
    goto tagEND;
  }
  // Transaction開始
  if($cMySQL->begin_transaction() === FALSE){
    goto tagEND;
  }
  // データ挿入#1
  $sql = "INSERT INTO `user` (`id`,`name`,`age`) VALUES(NULL,'Kimoto','41');";
  if($cMySQL->query($sql) === FALSE){
    $cMySQL->rollback(); goto tagEND;
  }
  // データ挿入#2
  $sql = "INSERT INTO `score` (`id`,`get`,`lost`) VALUES(NULL,'11','18','2');";
  if($cMySQL->query($sql) === FALSE){
    $cMySQL->rollback(); goto tagEND;
  }
  // Transaction終了(COMMIT)
  if($cMySQL->commit() === FALSE){
    $cMySQL->rollback(); goto tagEND;
  }
tagEND:
  if($cMySQL){
    $cMySQL->close();
  }

PHP ver.5.5以前の場合

上記のラッパー関数は使えない。SQLコマンドを直に打つこと。

  $cMySQL->query("SET AUTOCOMMIT=0;");
  $cMySQL->query("BEGIN;");
    :
  $cMySQL->query("COMMIT;");
    or
  $cMySQL->query("ROLLBACK;");

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)