因此,我有以下function
function searchusers($username){
$result=$this->conn->prepare("SELECT username,
profilimg,
(SELECT COUNT(title) FROM animelist WHERE mystatus='Watching' AND addedby LIKE CONCAT('%','?','%')) AS watching,
(SELECT COUNT(title) FROM animelist WHERE mystatus='Completed' AND addedby LIKE CONCAT('%','?','%')) AS completed,
(SELECT COUNT(title) FROM animelist WHERE mystatus='On-hold' AND addedby LIKE CONCAT('%','?','%')) AS onhold,
(SELECT COUNT(title) FROM animelist WHERE mystatus='Dropped' AND addedby LIKE CONCAT('%','?','%')) AS dropped,
(SELECT COUNT(title) FROM animelist WHERE mystatus='Plan to watch' AND addedby LIKE CONCAT('%','?','%')) AS plantowatch,
(SELECT COUNT(title) FROM animelist WHERE addedby LIKE CONCAT('%','?','%')) AS all,
(SELECT COUNT(title) FROM animelist WHERE addedby LIKE CONCAT('%','?','%') AND favourite='1') AS favourites,
(SELECT COUNT(subject) FROM comments WHERE name LIKE CONCAT('%','?','%')) AS allcomments,
(SELECT COUNT(review) FROM reviews WHERE addedby LIKE CONCAT('%','?','%')) AS allreviews,
(SELECT AVG(myscore) FROM animelist WHERE addedby LIKE CONCAT('%','?','%')) AS meanscore
FROM user WHERE username LIKE CONCAT('%','?','%') LIMIT 120");
$result->bindparam(1,$username);
$result->bindparam(2,$username);
$result->bindparam(3,$username);
$result->bindparam(4,$username);
$result->bindparam(5,$username);
$result->bindparam(6,$username);
$result->bindparam(7,$username);
$result->bindparam(8,$username);
$result->bindparam(9,$username);
$result->bindparam(10,$username);
$result->bindparam(11,$username);
$result->execute();
return $result->fetchall();
}正如您所看到的,我将相同的值绑定到11个参数,但我通过重复11次$result->bindparam(1,$username);来完成此操作,这看起来非常糟糕。
我想问的是,是否有更好的解决方案来将一个值绑定到所有参数,而不是重复如此多次的bindparam?
我也许可以用命名占位符而不是问号来解决这个问题,但这不是我现在正在寻找的解决方案。
我认为有一种方法可以用for/foreach解决这个问题,但我不知道它应该是什么样子。
谢谢你的帮助!
发布于 2019-05-16 15:23:09
for($i=0; $i<11; $i++){
$result->bindparam($i,$username);
}
return $result->fetchall();既然你知道有11个绑定参数,你可以简单地使用一个计数器。
发布于 2019-05-16 15:26:26
虽然另一个答案在技术上是正确的,也是您所要求的;在您的问题和提供的代码的上下文中,它不是最好的解决方案,因为使用循环绑定参数通常不是一个好的实践。
相反,我建议您只需使用相同的参数并绑定它一次(或者更改您的问题)。
为此,请使用命名参数:使用:parameterName而不是?
然后是bindparam('parameterName', $yourVariable)。(参见官方docs)。
也许您可以扩展您的问题,使用例更清晰。在此之前,命名参数是最好的解决方案。
https://stackoverflow.com/questions/56162886
复制相似问题