„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie führe ich PDO-Abfragen mit „WHERE... IN“ unter Verwendung von Platzhaltern und Parametern aus?

Wie führe ich PDO-Abfragen mit „WHERE... IN“ unter Verwendung von Platzhaltern und Parametern aus?

Veröffentlicht am 17.11.2024
Durchsuche:177

How to Execute PDO Queries with \

PDO-Abfragen mit „WHERE... IN“

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.

Das „WHERE... IN“-Rätsel

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.

Umfassen von Platzhaltern und Parametern

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.

Neuestes Tutorial Mehr>

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