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