Как я могу привязать одно значение ко всем параметрам просто в PHP PDO?

У меня есть следующее 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, но я не знаю, как это должно выглядеть.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
0
59
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
for($i=0; $i<11; $i++){
    $result->bindparam($i,$username);
}
return $result->fetchall();

Поскольку вы знаете, что существует 11 параметров привязки, вы можете просто использовать счетчик.

В то время как другой ответ технически правильный и то, о чем вы просите; в контексте вашего вопроса и предоставленного кода это не лучшее решение, так как обычно не рекомендуется использовать цикл для привязки параметров.

Вместо этого я бы рекомендовал вам просто использовать один и тот же параметр и привязать его один раз (или изменить свой вопрос).

Для этого используйте именованные параметры: вместо ? используйте :parameterName

Тогда bindparam('parameterName', $yourVariable). (см. официальный документы).

Возможно, вы могли бы расширить свой вопрос, чтобы сделать вариант использования более понятным. До тех пор именованные параметры являются лучшим решением.

Он работал бы только если включен режим эмуляции, но в настоящее время он в основном отключен.

Your Common Sense 16.05.2019 10:53

Другие вопросы по теме