无法解释的'SQLSTATE [HY093]:参数号无效:绑定变量数与令牌数不匹配'

时间:2014-02-12 19:03:14

标签: php mysql pdo prepared-statement

由于某些我不知道的原因,我收到此错误消息:

> Fatal error: Uncaught exception 'PDOException' with message
> 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables
> does not match number of tokens' in /var/www/tools/search.php:56 Stack
> trace: #0 /var/www/tools/search.php(56): PDOStatement->execute(Array)
> #1 {main} thrown in /var/www/tools/search.php on line 56

这是我的疑问:

$query = SELECT * FROM renkaat 
INNER JOIN ajoneuvotyypit ON tyyppiID = ajoneuvotyyppiID 
INNER JOIN vuodenajat ON vuodenaikaID = renkaat.vuodenaika 
INNER JOIN valmistajat ON valmistajaID = renkaat.valmistaja
WHERE olemassa = ?  AND ajoneuvontyyppiID = ? 

错误指向第56行,包含:

$db = $pdo->prepare($query);
$db->execute(array($exec_array));

毫无疑问,$exec_array是值得责备的人。但是,当我在执行它之前打印该值时,我得到1,1,这应该是正确的参数编号。

那么这里有什么问题?

1 个答案:

答案 0 :(得分:1)

我假设你想要用'1'替换第一个参数而用'1'替换第二个参数;

如果$exec_array已经是一个包含2个条目的数组,那么您应该这样做:

$db->execute($exec_array);

$exec_array放入数组中,使其成为具有单个条目的数组execute的参数。您的查询正在查找包含2个值的数组。

如果你运行var_dump($exec_array);,我假设你得到一个2值数组([0] => 1,[1] => 1)

如果$exec_array实际上是一个字符串'1,1',您需要在将它作为参数执行之前将其分解为数组:

$exec_array = explode(',', $exec_array);
$db->execute($exec_array);

否则使用array($exec_array)只会创建一个条目数组[0]=> '1,1'