Итак, у меня есть следующее 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 параметрами, но делаю это, повторяя $result->bindparam(1,$username);
11 раз, что выглядит довольно ужасно.
Я спрашиваю: есть ли лучшее решение для привязки одного значения ко всем параметрам вместо повторения bindparam
столько раз?
Возможно, я мог бы решить эту проблему проще с помощью именованных заполнителей вместо вопросительных знаков, но это не то решение, которое я сейчас ищу.
Я думаю, что есть способ решить эту проблему с помощью for
/ foreach
, но я не знаю, как это должно выглядеть.
Спасибо за помощь!