揮発性のメモ2

http://d.hatena.ne.jp/iww/

PDOでバインドし忘れた変数

文字列のカラムを数値と比較すると、文字列は自動的に数値にキャストされる。
だいたいは 0扱いになるので 0と比較することになり、マッチしてしまう。

 1 Prepare    [1] SELECT * FROM hoge WHERE str=?
 1 Execute    [1] SELECT * FROM hoge WHERE str=0

PDOでバインドし忘れた変数には0が入るので、ほぼ全てがマッチすることになる。
見つけにくいバグの元になるのでバインド忘れは特に注意する。


指定したパラメータ以外の変数をバインドするとエラーになるくせに
指定すべきパラメータがバインドされてないときはエラーにならない、
というのはどう考えても仕様がおかしい。