PDO::beginTransaction()

PDOでMySQLを使っていると、どうもトランザクションが効いてないっぽい。SQLが次から次へとオートコミットされてしまう。
こりゃおかしい、EngineもInnoDBに変更してるはずなのに、と。

どうやらPDOでは、レコードセットを返すクエリーではPDO::queryを、返さないクエリーではPDO::execを、といった具合に使い分ける様で。
なるほど、PDO::execからクエリーを投げれば、確かにトランザクションの対象になる。何やら面倒くさいなぁとも思ったが、PDO::execはレコードセットではなく、変更されたレコードの数が返る。これはこれで便利かもしれない。

今日の作業でちょっとハマりました、という話。

トラックバック

コメント

オート機能とかもあるんだ~
コマンドベースで今勉強中です^^
ぷーさんは、何でもできる人なんだねw
さすがだ!
私も1つくらい何かできるようにならなくちゃ><。

あれれ?
昨日コメント残したのに
反映されてない;;
なんでだろぉ...

あーちゃん、いらっしゃい。
このブログは、ぼくが承認したコメントのみ表示される設定なんですが(荒らし対策)、昨日はちょっと立て込んでてチェックし忘れました。ごめんなさい。

MySQLでは、トランザクションを開始する前に投げたクエリーは全て、その場でコミットされるんです。...ってOracleもそうじゃなかったっけ? :-)
試験勉強、大変だろうけどがんばってね。


コメントはすぐには反映しません。
ほぼ毎日チェックしていますが、翌日以降の反映となることもあります。

Twitter