MW211 EXIT

devlog
PDO/トランザクションとPDO
2012年03月16日
PDOでトランザクション処理を行う場合、
「PDO::beginTransaction()」などで処理を開始したりするわけだが、
注意すべきことがある。

通常、トランザクション処理中にSQLエラーが発生すると
最後にCOMMITしても自動でROLLBACKしてくれる。

だが、PDOレベルでエラーが発生するとSQLエラーを検出せずCOMMITしてしまう。

例えば、プレースホルダの記述ミスなんかがPDOレベルのエラーだ。

例えば、以下のようなSQL文で、文中に誤りがあったとする。
┌──────────────────────────────────────┐
│UPDATE "表" SET "列" = :プレースホルダ;                                     │
└──────────────────────────────────────┘

以下の場合は、SQL文としては成立し、SQLエラーとなるのでROLLBACKしてくれる。
┌──────────────────────────────────────┐
│UPDATE "表" SET "列×" = :プレースホルダ;                                   │
└──────────────────────────────────────┘

ところが、以下の場合、プレースホルダ不正によりSQL文成立まで至らないので
ROLLBACKしてくれない。
┌──────────────────────────────────────┐
│UPDATE "表" SET "列" = :プレースホルダ×;                                   │
└──────────────────────────────────────┘
分類:PDO、注意