首頁 >資料庫 >mysql教程 >如何在 MySQL 中的 PDO 預準備語句中正確使用萬用字元?

如何在 MySQL 中的 PDO 預準備語句中正確使用萬用字元?

DDD
DDD原創
2024-11-28 21:32:15391瀏覽

How to Properly Use Wildcards with PDO Prepared Statements in MySQL?

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn