プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
PHP、PDOでMySQLのDBのトランザクション管理を行う
結論から書きますね。

$pdo = new PDO($dsn, $user, $pwd);

でDBに接続したと仮定して

■トランザクション開始
$pdo->beginTransaction();

■コミット
$pdo->commit();

■ロールバック
$pdo->rollBack();

です。
これでもかってくらい、そのまんまですね(--;

気休めにサンプルコードを置いておきますφ(--;
<?php

$dsn = 'mysql:dbname=fp_test2;host=127.0.0.1;charset=utf8';
$user = 'user';
$pwd = 'pwd';

//DB接続
try {
    $pdo = new PDO($dsn, $user, $pwd);
} catch (PDOException $e) {
    die('DB接続失敗:' . mb_convert_encoding($e->getMessage(), 'UTF-8','SJIS-win'));
}

//トランザクション開始
$pdo->beginTransaction();

//------------------------
//INSERT
//------------------------
try {
    $sql = 'INSERT into tbl_test01 (column_varchar01, column_int02, column_varchar02) VALUES (:column_varchar01, :column_int02, :column_varchar02)';
    $stmt = $pdo->prepare($sql);
    $ret = $stmt->execute(array(
                        ':column_varchar01' => 'ほげ1',
                        ':column_int02' => 100,
                        ':column_varchar02' => 'ほげ2',
                    ));
    if (!$ret) {
        throw new Exception('INSERT 失敗');
    }

    //commit
    $pdo->commit();

} catch (PDOException $e) {
    //rollback
    $pdo->rollBack();

    die(mb_convert_encoding($e->getMessage(), 'UTF-8','SJIS-win'));
}

//さよーなら
$pdo = null;

うん、特に難しいところは無いですね。

ちなみにMySQLでトランザクション管理を行いたい場合は、
テーブルタイプをInnoDBやNDBにする必要があります。
デフォルトのMyISAM形式にはトランザクション機能が無いのでご注意ください。


MyISAM形式の場合はSQLを実行すると即commitされてしまいます。
「あれ?rollbackされないよ?」ではありません。
MyISAMさんはそもそも「トランザクションって何じゃらほい?」なのです。
MySQL慣れしている人からすれば常識レベルに当たり前のことなのですが、
普段はOracleとか使ってて今回だけMySQLなの~な人は戸惑うかもしれません。
上手くrollbackされなかったら、コードよりも先にテーブルタイプを確認してください。

と言う訳で、PDOでのトランザクション管理、完了\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:PDO  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事