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 könnte auf den ersten Blick erscheinen logical:
$query = "DELETE from `foo` WHERE `id` IN (:idlist)";
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:
$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)");
Als nächstes binden Sie jede ID an ein entsprechendes Fragezeichen:
for ($i = 0; $i bindParam($i 1, $idlist[$i]);
}
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.
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