Verwendung von Platzhaltern mit vorbereiteten PDO-Anweisungen
Das Ausführen von SQL-Abfragen mit Platzhaltern unter Verwendung von vorbereiteten PDO-Anweisungen (PHP Data Objects) kann eine Herausforderung sein. Dieser Artikel befasst sich mit dem Problem und bietet Lösungen.
Die gestellte Frage besteht darin, alle Zeilen in der gc_users-Tabelle mit einem Platzhalter im Namensfeld zu finden, was ausgedrückt werden kann als:
<code class="sql">SELECT * FROM `gc_users` WHERE `name` LIKE '%anyname%';</code>
Wann Beim Versuch, diese Abfrage mit vorbereiteten Anweisungen auszuführen, wurden zwei erfolglose Ansätze gewählt:
<code class="php">$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();</code>
Die bevorzugte Lösung beinhaltet die Verwendung von bindValue() anstelle von bindParam():
<code class="php">$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); $stmt->bindValue(':name', '%' . $name . '%'); $stmt->execute();</code>
Alternativ as Wie in der bereitgestellten Antwort vorgeschlagen, kann auch bindParam() verwendet werden:
<code class="php">$name = "%$name%"; $query = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` like :name"); $query->bindParam(':name', $name); $query->execute();</code>
Diese Lösungen zeigen, wie Platzhalter erfolgreich mit PDO-vorbereiteten Anweisungen verwendet werden.
Das obige ist der detaillierte Inhalt vonVerwendung von Platzhaltern mit vorbereiteten PDO-Anweisungen: Warum schlägt bindParam() fehl und wie verwendet man bindValue() oder vorformatierte Zeichenfolgen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!