1,795 views
この記事は最終更新から 2280日 が経過しています。
やってみたいこと
先に記した「(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;");