2,442 views
この記事は最終更新から 3262日 が経過しています。
やってみたいこと
先に記した「(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-08-08: 0回 2026-08-07: 1回 2026-08-06: 0回 2026-08-05: 0回 2026-08-04: 0回 2026-08-03: 0回 2026-08-02: 0回