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

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

DDD
Freigeben: 2024-12-18 13:50:16
Original
922 Leute haben es durchsucht

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%'
Nach dem Login kopieren

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 . "%");
Nach dem Login kopieren

und

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

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 . '%');
Nach dem Login kopieren

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);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage