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>
说明:
预备语句处理数据与查询分开。它们不执行字符串替换。仅当将值直接嵌入到查询中时才会添加引号。
以上是为什么我的 PHP PDO 准备语句与 MySQL LIKE 查询没有返回结果?的详细内容。更多信息请关注PHP中文网其他相关文章!