Verwenden von PDO: [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);
Verwenden von MySQLi [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 den SQL- IN()
Operator, um zu überprüfen, ob in einer bestimmten Liste ein Wert vorhanden ist.
Im Allgemeinen sieht es so aus:
expr IN (value,...)
Wir können einen Ausdruck erstellen, der innerhalb ()
unseres Arrays platziert wird. Beachten Sie, dass mindestens ein Wert in der Klammer stehen muss. Andernfalls gibt MySQL einen Fehler zurück. Dies entspricht der Sicherstellung, dass unser Eingabearray mindestens einen Wert hat. Um SQL-Injection-Angriffe zu vermeiden, generieren Sie zunächst ?
für jedes Eingabeelement ein, um eine parametrisierte Abfrage zu erstellen. Hier gehe ich davon aus, dass das Array mit Ihren IDs heißt $ids
:
$in = join(',', array_fill(0, count($ids), '?'));
$select = <<<SQL
SELECT *
FROM galleries
WHERE id IN ($in);
SQL;
Bei einem Eingabearray von drei Elementen $select
sieht es folgendermaßen aus:
SELECT *
FROM galleries
WHERE id IN (?, ?, ?)
Beachten Sie erneut, dass es ?
für jedes Element im Eingabearray ein gibt. Dann verwenden wir PDO oder MySQLi, um die Abfrage wie oben beschrieben vorzubereiten und auszuführen.
Verwenden des IN()
Operators mit Zeichenfolgen
Aufgrund der gebundenen Parameter ist es einfach, zwischen Zeichenfolgen und Ganzzahlen zu wechseln. Für PDO ist keine Änderung erforderlich. für MySQLi ändern Sie str_repeat('i',
zu, str_repeat('s',
wenn Sie Zeichenfolgen überprüfen müssen.
[1]: Ich habe einige Fehlerprüfungen auf Kürze weggelassen. Sie müssen für jede Datenbankmethode nach den üblichen Fehlern suchen (oder Ihren DB-Treiber so einstellen, dass Ausnahmen ausgelöst werden).
[2]: Benötigt PHP 5.6 oder höher. Wieder habe ich einige Fehlerprüfungen auf Kürze weggelassen.