Kann die Bindung eines Arrays an eine IN()-Bedingung mit PDO erfolgen?
Die Verwendung von Arrays in PDO-Abfragen für IN()-Bedingungen ist möglich Dies kann durch manuelles Erstellen der Platzhalter für jedes Array-Mitglied erreicht werden. Hier ist eine Aufschlüsselung des Prozesses:
$ids = [1, 2, 3, 7, 8, 9]; $inQuery = str_repeat('?,', count($ids) - 1) . '?'; // generates ?,?,?,?,?,? $stmt = $db->prepare("SELECT * FROM table WHERE id IN($inQuery)"); $stmt->execute($ids); $data = $stmt->fetchAll();
Konstruieren Sie die Variable $inQuery mit str_repeat, um eine Liste von Platzhaltern zu erstellen. Dadurch wird sichergestellt, dass jedes Array-Mitglied über einen entsprechenden Platzhalter verfügt.
Ein anderer Ansatz besteht darin, Arrays zusammenzuführen, die Platzhalter und die zugehörigen Werte enthalten. Diese Methode eignet sich, wenn andere Platzhalter in der Abfrage vorhanden sind.
$arr = [1,2,3]; $in = str_repeat('?,', count($arr) - 1) . '?'; $sql = "SELECT * FROM table WHERE foo=? AND column IN ($in) AND bar=? AND baz=?"; $stmt = $db->prepare($sql); $params = array_merge([$foo], $arr, [$bar, $baz]); $stmt->execute($params); $data = $stmt->fetchAll();
Benannte Platzhalter erfordern einen etwas anderen Ansatz, bei dem Sie eine entsprechende Platzhaltersequenz erstellen, z. B. :id0,:id1,:id2.
$ids = [1,2,3]; $in = ""; $i = 0; foreach ($ids as $item) { $key = ":id" . $i++; $in .= ($in ? "," : "") . $key; $in_params[$key] = $item; } $sql = "SELECT * FROM table WHERE foo=:foo AND id IN ($in) AND bar=:bar"; $stmt = $db->prepare($sql); $stmt->execute(array_merge($params, $in_params)); $data = $stmt->fetchAll();
Diese Methoden bieten eine sichere und effiziente Möglichkeit, Arrays in IN()-Bedingungen mit PDO zu verwenden.
Das obige ist der detaillierte Inhalt vonKann PDO die Array-Bindung für IN()-Klauselabfragen verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!