$sth = $dbh->prepare("SELECT users.userID,fname,lname,status FROM users INNER JOIN friends ON users.userID = friends.friendID WHERE friends.userID = ? AND ((friends.status LIKE 'group%' OR friends.status = 'friends') OR (users.status = '?') OR (users.userID = ?)) ORDER BY friends.status,lname,fname ASC");
$sth->execute(array($_SESSION['userID'],'sub:'.$_SESSION['userID'],$_SESSION['userID']));
在上面的代码中,您可以看到我有一个带有查询的准备语句。在该查询中,我对变量替换有三个问号。在执行语句中,我提供了变量。最后我检查了一下,我可以数到三,但 PHP 不同意。对于执行所在的行,我不断收到“无效参数编号:绑定(bind)变量的数量与标记数量不匹配”。
我认为它可能与第二个参数中的冒号有关,所以我把它拿出来,但它做了同样的事情。我什至拉出了字符串连接,只留下了 userID,我得到了同样的结果。
要么已经很晚了,要么这里发生了一些巫术。有什么见解吗?
最佳答案
这个'?'
不是一个占位符,它是一个字面上的问号。占位符不会被引用。现在,您有两个占位符,并且尝试绑定(bind)三个值。
所以尝试一下:
$sth = $dbh->prepare("SELECT users.userID,fname,lname,status FROM users INNER JOIN friends ON users.userID = friends.friendID WHERE friends.userID = ? AND ((friends.status LIKE 'group%' OR friends.status = 'friends') OR (users.status = ?) OR (users.userID = ?)) ORDER BY friends.status,lname,fname ASC");
关于如果我使用冒号,PHP 绑定(bind)参数数据库调用参数数量错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38548317/