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

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

Susan Sarandon
Susan Sarandonオリジナル
2024-12-01 07:44:14158ブラウズ

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

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

PHP では、MySQL LIKE クエリに対して PDO でプリペアド ステートメントを使用するのは困難な場合があります。この記事では、プリペアド ステートメントを使用して LIKE クエリを実行しようとするときに直面する一般的な問題について説明します。

次のクエリについて考えてみます。

SELECT    hs.hs_pk, 
          hs.hs_text, 
          hs.hs_did, 
          hd.hd_did, 
          hd.hd_text, 
          hv.hv_text, 
          hc.hc_text 
FROM      hs 
LEFT JOIN hd 
 ON       hs.hs_did = hd.hd_did 
LEFT JOIN hd 
 ON       hd.hd_vid = hv.hv_id 
LEFT JOIN hc 
 ON       hd.hd_pclass = hc.hc_id
WHERE     hs.hs_text LIKE "%searchTerm%"
LIMIT 25;

このクエリは、実行時に検索語を含む文字列を正常に検索します。 MySQL クライアントで直接。ただし、このクエリをプリペアド ステートメントを使用して PDO に変換すると、結果は返されません。

提供された PHP コードは、さまざまな構文を使用して LIKE クエリを実行しようとして失敗した例を示しています。問題は、準備されたステートメントで検索用語を指定するために使用される構文にあります。

間違った試みには次のものがあります。

$ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));
$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));

正しいアプローチは、次の方法を使用することです。構文:

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

説明:

準備されたステートメントは、単純な文字列置換を実行しません。データはクエリとは別に転送されるため、値を埋め込むときに引用符が不要になります。引用符は、実際の引用符で囲まれた値をクエリに挿入する必要がある場合にのみ必要です。

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

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