在PDO 準備語句中使用通配符
執行使用通配符(例如% 來匹配任意數量的字元)的MySQL 查詢可能會帶來挑戰使用PDO 準備好的語句時。本文介紹如何在準備好的語句中有效利用通配符。
原始查詢
最初的目標是執行以下查詢:
SELECT * FROM `gc_users` WHERE `name` LIKE '%anyname%'
失敗的嘗試
兩次嘗試使用準備好的語句失敗:
$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();
解決方案
問題在於使用bindParam()。要在準備好的語句中正確使用通配符,您應該使用bindValue()。下面的程式碼示範了正確的方法:
$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); $stmt->bindValue(':name', '%' . $name . '%'); $stmt->execute();
替代
另一個可行的選擇是修改程式碼以以下方式使用bindParam():
$name = "%$name%"; $stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); $stmt->bindParam(':name', $name); $stmt->execute();
以上是如何在 MySQL 中的 PDO 預準備語句中正確使用萬用字元?的詳細內容。更多資訊請關注PHP中文網其他相關文章!