Heim >Datenbank >MySQL-Tutorial >Wie binde ich LIKE-Werte korrekt mit PDO in SQL-Abfragen?

Wie binde ich LIKE-Werte korrekt mit PDO in SQL-Abfragen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-09 08:49:06748Durchsuche

How to Correctly Bind LIKE Values with PDO in SQL Queries?

Binden von LIKE-Werten mithilfe von PDO

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:

  • Verwenden Sie eine vorbereitete Anweisung mit bindParam():

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);
  • Verwenden Sie CONCAT(, um den LIKE-Ausdruck zu erstellen:

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, '%')
  • Behandeln Sie Sonderzeichen mit ESCAPE:

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn