ホームページ >データベース >mysql チュートリアル >MySQL の PDO プリペアド ステートメントでワイルドカードを適切に使用する方法

MySQL の PDO プリペアド ステートメントでワイルドカードを適切に使用する方法

DDD
DDDオリジナル
2024-11-28 21:32:15311ブラウズ

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

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。