PHP PDO 準備済みステートメント - MySQL LIKE クエリ
問題:
を使用して MySQL LIKE クエリを実行する場合PHP の PDO、検索では結果が返されません。
クエリ:
<code class="sql">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;</code>
PHP コード:
<code class="php">$sql = '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'; $prep = $dbh->prepare($sql); $ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));</code>
解決策:
間違いは、execute() メソッドの :searchTerm パラメータに割り当てられた値にあります。準備されたステートメントを使用する場合、二重引用符は必要ありません。
修正された PHP コード:
<code class="php">$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));</code>
説明:
準備されたステートメントはデータを処理します。クエリとは別に。文字列の置換は実行されません。引用符は、値をクエリに直接埋め込む場合にのみ追加されます。
以上がMySQL LIKE クエリを使用した PHP PDO プリペアド ステートメントが結果を返さないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。