PDO プリペアド ステートメントでワイルドカードを使用する方法:bindParam() が失敗する理由と、bindValue() または事前にフォーマットされた文字列を使用する方法

Linda Hamilton
リリース: 2024-10-29 19:29:30
オリジナル
908 人が閲覧しました

How to Use Wildcards with PDO Prepared Statements: Why bindParam() Fails and How to Use bindValue() or Pre-Formatted Strings?

PDO プリペアド ステートメントでのワイルドカードの使用

PDO (PHP データ オブジェクト) プリペアド ステートメントを使用してワイルドカードを使用して SQL クエリを実行するのは難しい場合があります。この記事では、この問題に対処し、解決策を示します。

提示された質問には、名前フィールドにワイルドカードを含む gc_users テーブル内のすべての行を検索することが含まれます。これは次のように表現できます。

<code class="sql">SELECT * FROM `gc_users` WHERE `name` LIKE '%anyname%';</code>
ログイン後にコピー

Whenプリペアド ステートメントを使用してこのクエリを実行しようとしたところ、次の 2 つのアプローチが失敗しました:

<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>
ログイン後にコピー

推奨される解決策には、bindParam() の代わりに bindingValue() を使用することが含まれます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート