Попробуйте повторить это:
foreach ($get as $res) {
'<li class="list-group-item"><span class="font-weight-bold">Product(s) : </span>';
Что-то там пропало, нет?
foreach ($get as $res) {
echo '<li class="list-group-item"><span class="font-weight-bold">Product(s) : </span>';
Иногда это простые вещи.
Обратите внимание, что PHP прекраснохорошо, когда определена бесполезная строка:
'foo';
Песочница
Не будет на это жаловаться.Для других языков это может быть проблемой, но PHP очень отказоустойчив (иногда даже слишком).
PS require("connection.php");
не является функцией, хотя он будет работать с ()
это считается плохой практикой.Вместо require "connection.php";
работает нормально.Это помогает отличить его от функции, когда вы смотрите на код.
Вам также следует немного переместить это:
foreach ($get as $res) {
//...
for ($i=0; $i <= $pieces_count -1 ; $i++) {
$query2 = "SELECT * FROM suppliers WHERE id = :id";
$get2 = $db->prepare($query2);
$get2->bindValue(":id",$pieces[$i]);
$get2->execute();
И сделать это так:
$query2 = "SELECT * FROM suppliers WHERE id = :id";
$get2 = $db->prepare($query2);
foreach ($get as $res) {
//...
for ($i=0; $i <= $pieces_count -1 ; $i++) {
$get2->execute(['id'=>$pieces[$i]]); //instead of binding, you can just do it in execute too
И делать Prepare вне цикла, это улучшит производительность в большинстве случаев.Каждый раз, когда вы выполняете команду Prepare, БД используется для компиляции инструкций запроса, затем при ее выполнении отправляются только данные.Вот как они побеждают SQl Injection, потому что SQL и DATA обрабатываются отдельно.
Итак, подготавливая его в цикле, вы запрашиваете у БД ненужную работу.Формат SQL не меняется в расчете на цикл, только данные.Для этого существует только необходимость execute
запроса для каждой итерации.
Наконец:
В вашем коде для вопроса отсутствуют два закрывающих }}
.,Убедитесь, что исправили эти синтаксические ошибки.Я подозреваю, что это всего лишь упущение в вопросе, поскольку вы заявили, что код работает локально.