PDO verwenden: [1]
$in = join(',', array_fill(0, count($ids), '?'));
$select = <<<SQL
SELECT *
FROM galleries
WHERE id IN ($in);
SQL;
$statement = $pdo->prepare($select);
$statement->execute($ids);
MySQLi verwenden [2]
$in = join(',', array_fill(0, count($ids), '?'));
$select = <<<SQL
SELECT *
FROM galleries
WHERE id IN ($in);
SQL;
$statement = $mysqli->prepare($select);
$statement->bind_param(str_repeat('i', count($ids)), ...$ids);
$statement->execute();
$result = $statement->get_result();
Erläuterung:
Verwenden Sie die SQL IN()
Operator, um zu prüfen, ob ein Wert in einer gegebenen Liste existiert.
Im Allgemeinen sieht das so aus:
expr IN (value,...)
Wir können einen Ausdruck erstellen, der innerhalb der ()
aus unserem Array. Beachten Sie, dass mindestens ein Wert innerhalb der Klammer stehen muss, sonst gibt MySQL einen Fehler zurück; das bedeutet, dass unser Eingabe-Array mindestens einen Wert haben muss. Um SQL-Injection-Angriffen vorzubeugen, erzeugen Sie zunächst eine ?
für jedes Eingabeelement, um eine parametrisierte Abfrage zu erstellen. Hier nehme ich an, dass das Array, das Ihre IDs enthält, heißt $ids
:
$in = join(',', array_fill(0, count($ids), '?'));
$select = <<<SQL
SELECT *
FROM galleries
WHERE id IN ($in);
SQL;
Gegeben ein Eingabefeld mit drei Elementen $select
aussehen wird:
SELECT *
FROM galleries
WHERE id IN (?, ?, ?)
Auch hier gilt es zu beachten, dass es eine ?
für jedes Element im Eingabefeld. Dann verwenden wir PDO oder MySQLi, um die Abfrage wie oben beschrieben vorzubereiten und auszuführen.
Die Verwendung des IN()
Operator mit Zeichenketten
Durch die gebundenen Parameter ist es einfach, zwischen Zeichenketten und ganzen Zahlen zu wechseln. Für PDO ist keine Änderung erforderlich; für MySQLi ändern str_repeat('i',
a str_repeat('s',
wenn Sie Zeichenketten überprüfen müssen.
[1]: Der Kürze halber habe ich einige Fehlerprüfungen weggelassen. Sie müssen für jede Datenbankmethode auf die üblichen Fehler prüfen (oder Ihren DB-Treiber so einstellen, dass er Ausnahmen auslöst).
[2]: Benötigt PHP 5.6 oder höher. Der Kürze halber habe ich wieder einige Fehlerprüfungen weggelassen.