29月/05
数値型に空文字列を代入すると0と評価される (18:58)
いやまあ、PHP的には当たり前なんだけど、なかなか気がつかなかったんで。
$value = ''; $do =& new FooTableDataObject(); $do->intvalue = $value; $do->find();
とかすると、
select * from FooTable where intvalue = 0
になるってことね*1。もちろん、
$value = NULL; $do =& new FooTableDataObject(); $do->intvalue = $value; $do->find();
ならば、
select * from FooTable
になる。
当たり前でもないのか
これは、ここの
/* this is probably an error condition! */
$this->whereAdd(" $kSql = ".intval($this->$k));
で数値化されているパターンに該当するんだよな。ってことは、this is probably an error conditionなわけか。っつーか、DB_DataObjectの作法としては、find前にvalidateしろってことなのかな。
*1 ちなみにintvalueはnot null。null許可でも同じ結果になるけど