Heim >Datenbank >MySQL-Tutorial >Wie verwende ich Platzhalter ordnungsgemäß mit vorbereiteten PDO-Anweisungen?

Wie verwende ich Platzhalter ordnungsgemäß mit vorbereiteten PDO-Anweisungen?

DDD
DDDOriginal
2024-12-18 13:50:16925Durchsuche

How to Properly Use Wildcards with PDO Prepared Statements?

Verwendung von Platzhaltern in vorbereiteten PDO-Anweisungen

Bei der Ausführung von SQL-Abfragen müssen häufig Daten nach bestimmten Kriterien gefiltert werden. Vorbereitete Anweisungen sind eine sichere Möglichkeit, dies zu erreichen, indem sie SQL-Injection-Schwachstellen verhindern. Die Verwendung von Platzhaltern in vorbereiteten Anweisungen kann jedoch zu Herausforderungen führen.

Die Herausforderung

Betrachten Sie die folgende Abfrage, die darauf abzielt, nach Benutzern zu suchen, deren Name „anyname“ enthält:

SELECT * FROM `gc_users` WHERE `name` LIKE '%anyname%'

Beim Versuch, diese Abfrage mit vorbereiteten Anweisungen auszuführen, gibt es gängige Vorgehensweisen wie:

$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name");
$stmt->bindParam(':name', "%" . $name . "%");

und

$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE '%:name%'");
$stmt->bindParam(':name', $name);

funktioniert möglicherweise nicht. Dies liegt daran, dass die Verwendung von Platzhaltern in der SQL-LIKE-Anweisung eine besondere Behandlung innerhalb vorbereiteter Anweisungen erfordert.

Die Lösung

Um Platzhalter korrekt mit vorbereiteten Anweisungen zu verwenden, kann man den bindValue verwenden ()-Methode anstelle von bindParam(). Hier ist ein Beispiel:

$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name");
$stmt->bindValue(':name', '%' . $name . '%');

Alternativ kann bindParam() verwendet werden, jedoch mit einer leicht geänderten Syntax:

$name = "%$name%";
$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` like :name");
$stmt->bindParam(':name', $name);

Beide Ansätze stellen sicher, dass die Platzhalterzeichen ordnungsgemäß maskiert und behandelt werden durch die Datenbank. Durch die Verwendung von bindValue() oder bindParam() auf diese Weise kann man mithilfe von Platzhaltern in vorbereiteten Anweisungen effektiv nach Daten suchen und so sowohl Sicherheit als auch Funktionalität gewährleisten.

Das obige ist der detaillierte Inhalt vonWie verwende ich Platzhalter ordnungsgemäß mit vorbereiteten PDO-Anweisungen?. 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