【问题标题】:Unexplainable 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens'无法解释的“SQLSTATE [HY093]:无效的参数号:绑定变量的数量与标记的数量不匹配”
【发布时间】:2014-02-12 19:03:14
【问题描述】:

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

> 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 这应该是正确的参数号。

那么这里出了什么问题?

【问题讨论】:

    标签: php mysql pdo prepared-statement


    【解决方案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'

    【讨论】:

    • 它已经不是一个数组了。它只是一串数字,后跟一个逗号。如果我输入$db->execute(array(1,1));,我会得到相同的结果。但如果我把它改成那样,我会得到Warning: PDOStatement::execute() expects parameter 1 to be array, string given in /var/www/tools/search.php on line 56
    • @Christian 啊,那你要炸了
    • 你是神吗?谢谢你。做到了。它解决了那个错误,并在查询中显示了另一个错误。现在它可以工作了。
    • @Christian 很高兴为您提供帮助,如果有机会,请将我的答案标记为正确。
    • 是的,两分钟后! :) 有趣的是,你尝试用谷歌搜索半小时的答案,然后花五分钟写一个问题并得到答案。
    猜你喜欢
    • 1970-01-01
    • 2017-04-27
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    相关资源
    最近更新 更多