ホームページ >データベース >mysql チュートリアル >PHP で MySQL LIKE クエリで PDO プリペアド ステートメントを正しく使用する方法

PHP で MySQL LIKE クエリで PDO プリペアド ステートメントを正しく使用する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-29 16:38:11953ブラウズ

How to Correctly Use PDO Prepared Statements with MySQL LIKE Queries in PHP?

PHP PDO プリペアド ステートメント -- MySQL LIKE クエリ

PHP で PDO プリペアド ステートメントを使用する場合、MySQL ドライバーを使用して LIKE クエリを実装します。挑戦的になる可能性があります。この記事では、必要な構文を検討し、開発者が遭遇する可能性のある問題の解決を支援する解決策を提供します。

問題の定式化

開発者が検索を実行しようとしています。 PDO の MySQL ドライバーを使用してクエリを実行します。このクエリは、MySQL クライアント経由で直接実行すると問題なく機能しますが、PHP を使用して実行すると結果が返されません。

MySQL LIKE クエリの PDO プリペアド ステートメント構文

文字列置換とは異なり、PHP PDO のプリペアド ステートメントはクエリとは別にデータを転送します。したがって、値を LIKE ステートメントにバインドするときは、二重引用符または一重引用符の使用を避ける必要があります。 PHP PDO で値を LIKE ステートメントにバインドするための正しい構文は次のとおりです。

$searchTerm = '%value%';
$prep = $dbh->prepare($sql);
$ret = $prep->execute(array(':searchTerm' => $searchTerm));

不正な試行

開発者が試行した次の構文は正しくありません。そして望ましいものは生成されません結果:

$searchTerm = '%value%';
$prep = $dbh->prepare($sql);
$ret = $prep->execute(array(':searchTerm' => '"%' . $searchTerm . '%"', '1');
$searchTerm = '%value%';
$prep = $dbh->prepare($sql);
$ret = $prep->execute(array(':searchTerm' => $searchTerm));

解決策

この問題を解決するには、次のコードを使用します:

$searchTerm = '%value%';
$prep = $dbh->prepare($sql);
$ret = $prep->execute(array(':searchTerm' => $searchTerm));

説明

PDO の準備されたステートメントは単に実行されるだけではありません文字列の置換。代わりに、クエリとは別にデータを処理します。引用符は、クエリ自体に値を埋め込む場合にのみ必要です。プリペアド ステートメント バインディングで引用符を省略すると、PDO は、LIKE 比較で使用するために '%value%' 文字列をデータベースに正しく転送できます。

以上がPHP で MySQL LIKE クエリで PDO プリペアド ステートメントを正しく使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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