PDO - 无效参数
就在最近我已经转向在PHP/MySQL中使用PDO,并转换了几十个查询。他们中的大多数工作,但是这很容易抛出一个在$sql->execute()
PDO - 无效参数
$sql=$pdo->prepare("SELECT id FROM user WHERE username = :username LIMIT 1");
$sql->execute(array(':username',$username));
PDOStatement对象::执行()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));
但仍然有同样的结果。有没有人看到明显的错误,或者为什么这个查询在所有其他人都不工作时不起作用?
非常感谢您提前!
的':username',$username
作品仅在bindParam()方法:
$sql->bindParam(':username', $username, PDO::PARAM_STR);
到这里看看:http://www.php.net/manual/de/pdostatement.bindparam.php
对于执行你需要传递正确的输入数值列表:
$sql->execute(array(':username' => $username));
占位符:
您也可以使用此:
$sql->execute(array($username));
但对于这一点,你需要查询改成这样:
$sql=$pdo->prepare("SELECT `id` FROM `user` WHERE `username` = ? LIMIT 1");
的?作为参与者并从数组中获取变量。当你在你的SQL语句中使用更多的占位符时,函数会按顺序将所有变量从数组中取出。
这不是bug,你只为一个占位符提供两个参数。
$sql->execute(array(':username',$username));
应该
$sql->execute(array(':username' => $username));
哦,我的上帝......谢谢你!多可惜! – Chris 2012-07-10 06:51:53
“* PDO - 无效的参数编号**虽然它是正确的***”。不,这是不正确的。 – Lion 2012-07-10 06:53:38
@Lion:是的,你是对的...已经改变了标题...我就像失明,谢谢你的帮助! – Chris 2012-07-10 06:55:01