MySQLでのトランザクション
まず前提としてトランザクションの処理を行う時は、テーブルのストレートエンジンをInnoDBに設定します。
(MySQLのデフォルトはMyISAMになっています。)
以下のサンプルはINSERT文を実行して、処理が成功すればコミット、失敗すればロールバックを行っています。
<?php //データベース接続 $conn = mysql_connect('localhost', 'root', ''); if (!$conn) { die("データベース接続失敗"); } //データベース選択 mysql_select_db('test') or die("データベース選択失敗"); //文字コード指定 mysql_set_charset('utf8'); //オートコミットを0に設定 $sql = "SET AUTOCOMMIT = 0"; mysql_query($sql); //トランザクション開始 $sql = "BEGIN"; mysql_query($sql); //INSERT文発行 $sql = "INSERT INTO test(name) VALUES('test')"; $res = mysql_query($sql); if ($res) { //成功時はコミットする $sql = "COMMIT"; mysql_query($sql, $conn); echo "コミットしました"; } else { //失敗時はロールバックする $sql = "ROLLBACK"; mysql_query($sql, $conn); echo "ロールバックしました"; } //mysql切断 mysql_close($conn); ?>
最初にAUTOCOMMITを0にして機能をオフに設定します。デフォルトではAUTOCOMMITの機能はオンになっているので、オンのままだとINSERT、UPDATE、DELETEを実行するとCOMMITする前でもデータは確定されてしまいます。なのでまず最初にAUTOCOMMITの機能をオフにしてからトランザクションを開始します。