In SQL-Abfragen wird der LIKE-Operator für Mustervergleiche verwendet. Wenn Sie die PDO-Erweiterung zum Ausführen von Abfragen verwenden, ist es wichtig, LIKE-Werte korrekt zu binden, um mehrdeutige Ergebnisse zu vermeiden.
Ein häufiges Szenario ist das Binden einer Teilzeichenfolge an einen LIKE-Ausdruck, wie zum Beispiel:
select wrd from tablename WHERE wrd LIKE '$partial%'
Um dies mithilfe von PDO zu binden, besteht der falsche Ansatz darin, $partial% einfach durch einen benannten Parameter zu ersetzen, z. B.:
select wrd from tablename WHERE wrd LIKE ':partial%'
This funktioniert nicht, da PDO das % nicht als Platzhalterzeichen interpretiert, was zu falschen Ergebnissen führt. Stattdessen gibt es mehrere Möglichkeiten, das gewünschte Verhalten zu erreichen:
Binden Sie den Parameter mit an Escape-Version der Teilzeichenfolge. Zum Beispiel:
$stmt = $db->prepare("SELECT wrd FROM tablename WHERE wrd LIKE :partial"); $escapedPartial = $db->quote($partial . '%'); $stmt->bindParam(':partial', $escapedPartial);
Erstellen Sie den LIKE-Ausdruck mithilfe von CONCAT dynamisch innerhalb der Abfrage ()-Funktion ermöglicht es Ihnen, die Notwendigkeit eines Escapezeichens zu vermeiden, da das Platzhalterzeichen am MySQL-Ende hinzugefügt wird Beispiel:
SELECT wrd FROM tablename WHERE wrd LIKE CONCAT(:partial, '%')
Wenn die Teilzeichenfolge Sonderzeichen wie %, _ oder , enthält, werden Sie Mit der ESCAPE-Klausel können Sie ein Platzhalterzeichen angeben, das die besondere Bedeutung des Zeichens aufhebt. Zum Beispiel:
$stmt = $db->prepare("SELECT wrd FROM tablename WHERE wrd LIKE :term ESCAPE '+'"); $escapedTerm = str_replace(array('+', '%', '_', '\'), array('++', '+%', '+_', '\+'), $term); $stmt->bindParam(':term', $escapedTerm);
Das obige ist der detaillierte Inhalt vonWie binde ich LIKE-Werte korrekt mit PDO in SQL-Abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!