2,417 views
この記事は最終更新から 3216日 が経過しています。
やってみたいこと
先に記した「(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;");
アクセス数(直近7日): ※試験運用中、BOT除外簡易実装済2026-06-23: 0回 2026-06-22: 5回 2026-06-21: 1回 2026-06-20: 0回 2026-06-19: 0回 2026-06-18: 0回 2026-06-17: 2回