PDO-Abfragen mit „WHERE... IN“-Klauseln
Wenn Sie mit PHPs PDO für den Datenbankzugriff arbeiten, erstellen Sie „WHERE... IN“-Abfragen können eine Herausforderung sein. In diesem Fall besteht das Ziel darin, Datensätze aus einer Tabelle basierend auf einer Liste von IDs zu löschen, die aus einem Formular erhalten wurden.
Ursprüngliche Abfrage
<code class="php">$query = "DELETE from `foo` WHERE `id` IN (:idlist)"; $st = $db->prepare($query); $st->execute(array(':idlist' => $idlist));</code>
Problem
Diese Abfrage löscht nur die erste ID in der Liste und verwirft die restlichen IDs aufgrund des Komma-Trennzeichens.
Lösung mit Fragezeichen
Da vorbereitete Anweisungen keine Werte mit der Kontrollflusslogik (den Kommas) vermischen können, ist es notwendig, einen Platzhalter pro Wert in der Liste zu verwenden. Dies wird erreicht, indem eine durch Kommas getrennte Folge von Fragezeichen erstellt und die einzelnen IDs an diese gebunden werden.
<code class="php">$idlist = array('260','201','221','216','217','169','210','212','213'); $questionmarks = str_repeat("?,", count($idlist)-1) . "?"; $stmt = $dbh->prepare("DELETE FROM `foo` WHERE `id` IN ($questionmarks)"); foreach ($idlist as $id) { $stmt->bindParam($id); }</code>
Dieser Ansatz erfordert ein Durchlaufen der Liste, um jede ID nacheinander zu binden und sicherzustellen, dass alle Datensätze als gelöscht werden beabsichtigt.
Das obige ist der detaillierte Inhalt vonWie lösche ich Datensätze mit \'WHERE... IN\'-Klauseln in PDO-Abfragen effektiv?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!