トランザクション制御
MySQL的には、BIGINを発行して、COMMIT/ROLLBACKを発行することでトランザクション制御が可能。
WordPressでは
function hoge(){ global $wpdb; // トランザクションを開始 $wpdb->query("START TRANSACTION"); $result = fuga(); if($result['status'] == 'OK'){ $wpdb->query("COMMIT"); }else{ $wpdb->query("ROLLBACK"); } }
ROLLBACKが効かない、ROLLBACKしない
"START TRANSACTION" して "ROLLBACK" してもロールバックせずに、ハマってしまったので記録しておきます。
ポイントはテーブルの「Storage Engines」でした。
トランザクション制御を有効にするには「InnoDB」 でなければならい。ハマった私の環境では「MyISAM」。。
トランザクション制御に関係するテーブルの「Storage Engines」を「InnoDB」に変更することで、トランザクション制御が出来るようになり、ロールバックが実行された。
Storage EnginesをInnoDBに変更する方法
phpMyAdmin
テーブル → 操作 → テーブルオプション
コマンドライン
mysql> ALTER TABLE [テーブル名] ENGINE InnoDB;