ホームページ >データベース >mysql チュートリアル >PHP で MySQL LIKE クエリで PDO プリペアド ステートメントを正しく使用する方法
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 サイトの他の関連記事を参照してください。