PDO - 参数号无效

时间:2012-07-10 06:49:57

标签: php mysql pdo

就在最近,我转而在PHP / MySQL中使用PDO并转换了几十个查询。他们中的大多数都在工作,但这很容易在$sql->execute()

引发异常
$sql=$pdo->prepare("SELECT id FROM user WHERE username = :username LIMIT 1");
$sql->execute(array(':username',$username));
  

PDOStatement :: execute()pdostatement.execute SQLSTATE [HY093]:参数号无效:绑定变量数与...中的标记数不匹配

经过研究,我发现了这个链接:https://bugs.php.net/bug.php?id=60515

...因此尝试将查询更改为

$sql=$pdo->prepare("SELECT `id` FROM `user` WHERE `username` = :username LIMIT 1");
$sql->execute(array(':username',$username));

但仍然有相同的结果。有没有人看到什么是明显错误的?为什么这个查询在其他所有人都没有的时候不起作用?

非常感谢你!

2 个答案:

答案 0 :(得分:12)

这不是错误,您只为一个占位符提供了两个参数。

$sql->execute(array(':username',$username));

应该是

$sql->execute(array(':username' => $username));

答案 1 :(得分:6)

':username',$username仅适用于bindParam()方法:

$sql->bindParam(':username', $username, PDO::PARAM_STR);

看看这里:http://www.php.net/manual/en/pdostatement.bindparam.php

对于执行,您需要传递正确的仅输入值数组:

$sql->execute(array(':username' => $username));

<强>占位符:

您也可以使用:

$sql->execute(array($username));

但为此您需要将查询更改为:

$sql=$pdo->prepare("SELECT `id` FROM `user` WHERE `username` = ? LIMIT 1");    

?作为palceholder工作并从数组中获取变量。当您在SQL语句中使用更多占位符时,该函数会按顺序从数组中获取所有变量。