Cześć,
Mam pytanie. W jaki sposób obsługiwać, ogarniać sytuacje gdy mamy wiele parametrów przekazanych w URL do backendu?
Np. taki adres:
www.strona.com/api/pakiety?a=1,2,3,4,5,6
No więc po pierwsze, na razie to nie jest kilka parametrów tylko jeden.
<?php
$_GET['a']; // string ("1,2,3,4,5,6")
Jeśli chcesz, żeby to była lista parametrów oddzielonych przecinkami, to powinieneś zrobić coś takiego:
<?php
$arguments = explode($_GET['a']); // array ("1", "2", "3", "4", "5", "6")
Niestety PDO nie udostępnia żadnego interfejsu na bindowanie wielu wartości na raz. Tutaj jest podpowiedź jak można zbudować prepared query, do którego potem można zbindować wiele parametrów: https://stackoverflow.com/questions/920353/can-i-bind-an-array-to-an-in-condition-in-a-pdo-query
<?php
$arguments = explode($_GET['a']);
$placeholders = str_repeat('?,', count($array) - 1) . '?'; // string ("?,?,?,?,?,?")
$pdo = new PDO(...);
$stmt = $pdo->prepare(
'SELECT *
FROM table
WHERE id IN(' . $placeholders . ')'
);
$stmt->execute($arguments);
[...] lub napisać raw query i wstawić WHERE a in (".$_GET['a'].")
(oczywiście po uprzednim zwalidowaniu wartości, bo każdy może wstawić w link co zechce i popsuć ci bazę danych)
To jest potencjalna opcja, ale bardzo niezalecałbym w ogóle jej rozważać. Nie ma powodu się ku temu skłaniać, skoro są inne, lepsze sposoby żeby osiągnąć WHERE IN
.