PDOStatement->bindParam の罠

PHPのデータベースへのアクセスを支援するPDO関係のバグに嵌って抜け出せなかったのだがようやっと理由が分かった


バグは二つあって

■constなど定義された物(非変数)を直接パラメータとして指定できない

こっちは駄目

 $sth->bindParam(1, self::ID);

こっちはOK

 $id = self::ID;
 $sth->bindParam(1, $id);

どうやら、参照渡しをしないと駄目らしい・・・
また、PDOStatement->bindValue をつかうと回避できるようだ。



■数字(非文字列)をパラメータとして指定するには一手間必要
SQL文が 'LIMIT 0, ?' と仮定する。

こっちは駄目

 $limit = 10;
 $sth->bindParam(1, $limit);

こっちはOK

 $limit = 10;
 $sth->bindParam(1, $limit, PDO::PARAM_INT);

どうやら、明示的に型を指定しないと駄目らしい・・・



・・・ふ〜、結局3日かかったぜ