【PHP】PDO::execとUPDATE文の不具合

PHPのデータベース抽象化レイヤーPDOのexecを実行した際、少しはまったので覚書しておきます。

どうはまったのかと言うと、exec をUPDATE文にて実行した際、期待した返り値が返ってこなかったというものです。

PHPマニュアルのexec の説明には次のようにあります。
「PDO::exec() は、発行した SQL ステートメントによって更新もしくは 削除された行数を返します。 1 行も作用しなかった場合、PDO::exec() は 0 を返します。」
http://php.net/manual/ja/pdo.exec.php

つまり、1行に作用すれば、1が返ってくるはずですが、場合により、0が返ってくる事があったのです。

調べてみると、どうやら、ある行に作用していても、その行が実質的に変更されていなければ、0を返す仕様らしいです。

どういうことかと言うと、ある行をUPDATE しても、その内容が同一のものであった場合、UPDATE 前後で内容が変わらないので、結局0を返すのです。

更新に成功していても、値が変わらないので、行に作用しなかったものとみなされて0が返ってくるという訳です。

PDO::exec を使っていて、返り値がおかしかったら、この点を調べてみると良いかもしれません。

(注意)ざっと調べただけですので間違っている可能性があります。参考は自己責任でお願いします。

以上です。

カテゴリー: PHP パーマリンク

コメントを残す

メールアドレスが公開されることはありません。