在PDO 準備語句中使用通配符
使用PDO(PHP 資料物件)準備語句執行帶有通配符的SQL 查詢可能具有挑戰性。本文解決了該問題並提供了解決方案。
提出的問題涉及查找gc_users 表中名稱欄位中所有帶有通配符的行,可以表示為:
<code class="sql">SELECT * FROM `gc_users` WHERE `name` LIKE '%anyname%';</code>
何時嘗試使用準備好的語句執行此查詢,採取了兩種不成功的方法:
<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>
首選解決方案包括使用bindValue()而不是bindParam():
<code class="php">$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); $stmt->bindValue(':name', '%' . $name . '%'); $stmt->execute();</code>
或者,如在提供的答案中建議,也可以使用bindParam():
<code class="php">$name = "%$name%"; $query = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` like :name"); $query->bindParam(':name', $name); $query->execute();</code>
這些解決方案示範如何在PDO 準備好的語句中成功使用通配符。
以上是如何在 PDO 準備語句中使用通配符:為什麼 bindParam() 失敗以及如何使用 bindValue() 或預先格式化字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!