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!