首页  >  文章  >  后端开发  >  为什么我的 PHP PDO 准备语句与 MySQL LIKE 查询没有返回结果?

为什么我的 PHP PDO 准备语句与 MySQL LIKE 查询没有返回结果?

DDD
DDD原创
2024-10-31 10:41:02951浏览

Why does my PHP PDO prepared statement with MySQL LIKE query return no results?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn