Wiele parametrów w URL i używanie ich w query

0

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

W jaki sposób dodać 1,2,3,4,5,6 do SQLa? Chciałbym to zrobić przy pomocy SQL IN. Używam PHP PDO.

$sql = "SELECT *
        FROM tabela_name 
        WHERE ";
$sql .= "a IN (:a_values)";

Jak ogarniać takie case?

0

do tego musiałbyś użyć bindParam dla każdej wartości z osobna https://www.php.net/manual/en/pdostatement.bindparam.php 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)

2
xavi_sof napisał(a):

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);
666 napisał(a):

[...] 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.

0

Dzięki za pomoc. W odpowiedzi z bazy brakuje mi polish znaków, w bazie je mam. Co może być powodem? UTF-8? Gdy używałem mysqli ustawiałem utf-8 i działało. Jak mogę to zrobić w PDO?

1 użytkowników online, w tym zalogowanych: 0, gości: 1