Heim >Datenbank >MySQL-Tutorial >Wie binde ich LIKE-Parameter sicher mit Platzhaltern in PDO?

Wie binde ich LIKE-Parameter sicher mit Platzhaltern in PDO?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-06 03:09:12930Durchsuche

How to Safely Bind LIKE Parameters with Wildcards in PDO?

Binden von LIKE-Werten mit %-Platzhaltern in PDO

PDO bietet eine sichere Möglichkeit, SQL-Abfragen mit gebundenen Parametern auszuführen und so SQL-Injection-Schwachstellen zu verhindern. Beim Binden von LIKE-Parametern, die Platzhalterzeichen wie % enthalten, kann es zu Verwirrung kommen.

In der folgenden Abfrage versuchen wir, die Variable $partial% mithilfe von PDO zu binden:

select wrd from tablename WHERE wrd LIKE '$partial%'

Es ist wichtig zu verstehen, wie PDO mit solchen Bindungen umgeht. Der richtige Ansatz hängt von Ihren spezifischen Anforderungen ab.

Option 1: Mit teilweisem Platzhalter (%) am Ende binden

Ja, das ist eine gültige Option:

select wrd from tablename WHERE wrd LIKE ':partial%'

wobei :partial an $partial="somet" gebunden ist.

Option 2: Mit partiellem Platzhalter (%) innerhalb von binden Wert

Sie können auch diesen Ansatz verwenden:

select wrd from tablename WHERE wrd LIKE ':partial'

wobei :partial an $partial="somet%" gebunden ist.

Alternative: CONCAT-Funktion verwenden

Wenn Sie möchten, können Sie die Zeichenfolgenverkettung innerhalb der MySQL-Abfrage selbst durchführen:

SELECT wrd FROM tablename WHERE wrd LIKE CONCAT(:partial, '%')

Speziell Zeichenverarbeitung

Wenn Ihr Teilwort Sonderzeichen wie %, _ oder enthält, müssen Sie diese manuell maskieren, bevor Sie den Parameter binden. Der folgende Code demonstriert dies:

$stmt= $db->prepare("SELECT wrd FROM tablename WHERE wrd LIKE :term ESCAPE '+'");
$escaped= str_replace(array('+', '%', '_'), array('++', '+%', '+_'), $var);
$stmt->bindParam(':term', $escaped);

Das obige ist der detaillierte Inhalt vonWie binde ich LIKE-Parameter sicher mit Platzhaltern in PDO?. 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