Beim Bemühen, den Datenbankzugriff mit PDO zu verbessern, stoßen zahlreiche Entwickler auf Herausforderungen, insbesondere mit „WHERE... IN“-Abfragen. Lassen Sie uns in die Feinheiten eintauchen und den richtigen Ansatz für die Verwendung einer Liste von Elementen in einer vorbereiteten PDO-Anweisung finden.
Stellen Sie sich ein Szenario vor, in dem Sie es benötigen Löschen Sie Elemente aus einer Datenbank basierend auf einer Liste der überprüften Elemente aus einem Formular. Jedes Element verfügt über eine entsprechende ID, die normalerweise in einem Array gespeichert wird. Die herkömmliche „WHERE... IN“-Abfrage würde etwa so aussehen:
$query = "DELETE FROM `foo` WHERE `id` IN (:idlist)"; $st = $db->prepare($query); $st->execute(array(':idlist' => $idlist));
Dieser Ansatz führt jedoch häufig dazu, dass nur die erste ID gelöscht wird. Dies liegt daran, dass PDO die durch Kommas getrennte Liste als einzelnen Wert interpretiert und daher die nachfolgenden IDs ignoriert.
Um dieses Problem zu umgehen, müssen Platzhalter und Bindungsparameter genutzt werden. Der Ansatz besteht darin, die gesamte durch Kommas getrennte Liste durch einzelne Platzhalter (Fragezeichen) zu ersetzen und das Array zu durchlaufen, um jede ID an einen Platzhalter zu binden. So würden Sie dies erreichen:
$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(1, $id); }
Dieser überarbeitete Ansatz stellt sicher, dass jede ID als separater Parameter behandelt wird, wodurch eine genaue Ausführung der Abfrage ermöglicht wird.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3