Heim >Datenbank >MySQL-Tutorial >Wie verwende ich Platzhalter ordnungsgemäß mit PDO-vorbereiteten Anweisungen in MySQL?
Verwendung von Platzhaltern in PDO-vorbereiteten Anweisungen
Das Ausführen von MySQL-Abfragen, die Platzhalter wie % verwenden, um eine beliebige Anzahl von Zeichen abzugleichen, kann eine Herausforderung darstellen bei Verwendung von PDO-vorbereiteten Anweisungen. In diesem Artikel geht es darum, wie Sie Platzhalter mit vorbereiteten Anweisungen effektiv nutzen können.
Ursprüngliche Abfrage
Das ursprüngliche Ziel bestand darin, die folgende Abfrage auszuführen:
SELECT * FROM `gc_users` WHERE `name` LIKE '%anyname%'
Fehlgeschlagene Versuche
Es wurden zwei erfolglose Nutzungsversuche unternommen Vorbereitete Anweisungen:
$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); $stmt->bindParam(':name', "%" . $name . "%"); $stmt->execute(); $stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE '%:name%'"); $stmt->bindParam(':name', $name); $stmt->execute();
Lösung
Das Problem liegt in der Verwendung von bindParam(). Um Platzhalter in vorbereiteten Anweisungen korrekt zu verwenden, sollten Sie bindValue() verwenden. Der folgende Code zeigt den richtigen Ansatz:
$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); $stmt->bindValue(':name', '%' . $name . '%'); $stmt->execute();
Alternative
Eine weitere praktikable Option besteht darin, den Code so zu ändern, dass bindParam() auf folgende Weise verwendet wird:
$name = "%$name%"; $stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); $stmt->bindParam(':name', $name); $stmt->execute();
Das obige ist der detaillierte Inhalt vonWie verwende ich Platzhalter ordnungsgemäß mit PDO-vorbereiteten Anweisungen in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!