ホームページ >データベース >mysql チュートリアル >MySQL の PDO プリペアド ステートメントでワイルドカードを適切に使用する方法
PDO プリペアド ステートメントでのワイルドカードの使用
任意の数の文字に一致する % などのワイルドカードを使用する MySQL クエリを実行すると、問題が発生する可能性がありますPDO プリペアドステートメントを使用する場合。この記事では、プリペアド ステートメントでワイルドカードを効果的に利用する方法について説明します。
元のクエリ
最初の目標は、次のクエリを実行することでした:
SELECT * FROM `gc_users` WHERE `name` LIKE '%anyname%'
失敗した試行
2 回の試行が失敗しました準備されたステートメントを使用するには:
$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();
代替
もう 1 つの実行可能なオプションは、次の方法で bindingParam() を使用するようにコードを変更することです。
$name = "%$name%"; $stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); $stmt->bindParam(':name', $name); $stmt->execute();
以上がMySQL の PDO プリペアド ステートメントでワイルドカードを適切に使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。