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