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 を使っていて、返り値がおかしかったら、この点を調べてみると良いかもしれません。
(注意)ざっと調べただけですので間違っている可能性があります。参考は自己責任でお願いします。
以上です。