Heim > Artikel > Backend-Entwicklung > Wie gehe ich mit „WHERE... IN'-Abfragen mit PDO um, wenn mehrere Datensätze gelöscht werden?
Verarbeitung von „WHERE... IN“-Abfragen mit PDO
Bei Verwendung von PDO für den Datenbankzugriff werden Abfragen mit „WHERE... IN“ verwaltet. IN“-Klauseln können eine Herausforderung darstellen. Stellen Sie sich das folgende Szenario vor: Sie müssen Einträge aus einer Datenbanktabelle entfernen, die auf einer Liste überprüfter Formularelemente basiert, dargestellt als „$idlist“ mit variabler Länge und variablem Inhalt (z. B. „260,201,221,216,217,169,210,212,213“).
Zunächst Die Verwendung einer Abfrage wie der folgenden mag logisch erscheinen:
<code class="php">$query = "DELETE from `foo` WHERE `id` IN (:idlist)";</code>
Dieser Ansatz löscht jedoch nur die erste ID. Die Kommas und nachfolgenden IDs werden fälschlicherweise ignoriert.
Um dieses Problem zu lösen, ist es wichtig, das Verhalten vorbereiteter Anweisungen in PDO zu verstehen. Werte können mithilfe nummerierter oder benannter Parameter an Platzhalter gebunden werden. Für eine „WHERE... IN“-Abfrage sollte jede ID in der Liste einen eigenen Platzhalter haben.
Die Lösung erfordert einen dynamischen Ansatz:
<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)");</code>
Als nächstes binden Sie jede ID an ein entsprechendes Fragezeichen:
<code class="php">for ($i = 0; $i < count($idlist); $i++) { $stmt->bindParam($i + 1, $idlist[$i]); }</code>
Diese Methode stellt sicher, dass jedes Element in der Liste ordnungsgemäß an einen Platzhalter gebunden ist, sodass die Abfrage die gewünschten Datensätze erfolgreich löschen kann.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit „WHERE... IN'-Abfragen mit PDO um, wenn mehrere Datensätze gelöscht werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!