日記
pdo-mysqlのbindの挙動の違いEdit

Windows/PHP 5.1.4/MySQL 4.1.7(※$dbはpdoMysqlを使ったZend_Db_Adapterだけど、内部の処理はほぼそのままPDOを叩いているだけ)では、

$sql = 'select id from bar where foo_id = :id';
$result = $db->query($sql, array('id' => 1, 'test' => 'test'));

みたいなコードが動くのに、Fedora Core3/PHP5.1.4/MySQL 4.1.19では、「SQLSTATE[HY093]: Invalid parameter number: parameter was not defined」が出て動かない。これを、

$sql = 'select id from bar where foo_id = :id';
$result = $db->query($sql, array('id' => 1));

に変えると動く。

つまり、プレースホルダーで指定されたパラメータ以外をbindする値として渡すと、エラーが出るらしい。この辺の仕様ってPHPのPDO関連のドキュメントには書かれていないっぽいけど、これはバグなのか仕様なのかどっちだろう

Published At2006-05-25 00:00Updated At2006-05-25 00:00