首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在PHP中简单地将一个值绑定到所有参数?

如何在PHP中简单地将一个值绑定到所有参数?
EN

Stack Overflow用户
提问于 2019-05-16 15:19:57
回答 2查看 56关注 0票数 4

因此,我有以下function

代码语言:javascript
运行
复制
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解决这个问题,但我不知道它应该是什么样子。

谢谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-16 15:23:09

代码语言:javascript
运行
复制
for($i=0; $i<11; $i++){
    $result->bindparam($i,$username);
}
return $result->fetchall();

既然你知道有11个绑定参数,你可以简单地使用一个计数器。

票数 2
EN

Stack Overflow用户

发布于 2019-05-16 15:26:26

虽然另一个答案在技术上是正确的,也是您所要求的;在您的问题和提供的代码的上下文中,它不是最好的解决方案,因为使用循环绑定参数通常不是一个好的实践。

相反,我建议您只需使用相同的参数并绑定它一次(或者更改您的问题)。

为此,请使用命名参数:使用:parameterName而不是?

然后是bindparam('parameterName', $yourVariable)。(参见官方docs)。

也许您可以扩展您的问题,使用例更清晰。在此之前,命名参数是最好的解决方案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56162886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档