「Webアプリにトランザクションはいらない。」
そう言いきった人がいました。
私はその人に問いたい。
整合性取れなくなったらどうすんの?
(ノ・・)ン。。。。。。(((●コロコロッ
データの整合性はWebアプリに限らずすべてのアプリで重要な要素。
ただ、SQLに「BEGIN;INSERT INTO 〜〜 ; END;」とか書くのはちょっと美しくないかも。
というのでトランザクション制御をしてくれるメソッドがこれ。
$dsn= "mysql://username:password@host/db_name"; $db = DB :: connect( $dsn); // 通常接続 if( DB :: isError( $db ) ) // エラー処理 die( $db->getMessage() ); // メッセージ表示 $db->setFetchMode( DB_FETCHMODE_ASSOC ); // 配列モード(デフォルトはオブジェクト) $sql = " INSERT INTO table_name( col1, col2 ) VALUES( val1, val2 ); "; // 自動コミット解除(トランザクション開始) $db->autoCommit( false ); $result = $db->query( $sql ); // クエリ送信 if( DB :: isError( $result ) ){ $db->rollback(); die( $result->getMessage() ); } $db->commit();
問題点
ちょっとクエリ数が多い