就在最近,我转而使用PHP/MySQL中的PDO并转换了几十个查询.他们中的大多数都在工作,但是这很容易就会引发异常$sql->execute()
$sql=$pdo->prepare("SELECT id FROM user WHERE username = :username LIMIT 1");
$sql->execute(array(':username',$username));
Run Code Online (Sandbox Code Playgroud)
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));
Run Code Online (Sandbox Code Playgroud)
但仍然有相同的结果.有人看到了什么是明显错误的,或者为什么这个查询在其他所有人都没有的时候不起作用?
非常感谢你提前!
xda*_*azz 12
这不是错误,您只为一个占位符提供了两个参数.
$sql->execute(array(':username',$username));
Run Code Online (Sandbox Code Playgroud)
应该
$sql->execute(array(':username' => $username));
Run Code Online (Sandbox Code Playgroud)
在':username',$username仅在bindParam()方法的工作原理:
$sql->bindParam(':username', $username, PDO::PARAM_STR);
Run Code Online (Sandbox Code Playgroud)
看看这里:http://www.php.net/manual/en/pdostatement.bindparam.php
对于execute,您需要传递正确的仅输入值数组:
$sql->execute(array(':username' => $username));
Run Code Online (Sandbox Code Playgroud)
占位符:
你也可以用这个:
$sql->execute(array($username));
Run Code Online (Sandbox Code Playgroud)
但为此您需要将查询更改为:
$sql=$pdo->prepare("SELECT `id` FROM `user` WHERE `username` = ? LIMIT 1");
Run Code Online (Sandbox Code Playgroud)
的?作为palceholder工作并从数组中获取变量.当您在SQL语句中使用更多占位符时,该函数会按顺序从数组中获取所有变量.
| 归档时间: |
|
| 查看次数: |
16591 次 |
| 最近记录: |