You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP优化MySQL LIKE查询PDO预处理语句无返回结果问题求助

问题根源

核心问题为传入的$term参数额外携带了单引号,与PDO参数绑定逻辑冲突:

  • 原始拼接SQL的版本中,带单引号的$term(格式为'%search term%')拼入语句后,实际执行条件为LIKE '%search term%',符合MySQL LIKE语法要求,可正常返回结果。
  • 改用参数绑定后,PDO会自动对传入字符串做转义、引号包裹处理,此时携带单引号的$term会被转义为\'%search term%\,最终执行条件变为LIKE '\'%search term%\'',等同于匹配内容本身包含单引号、百分号和搜索词的记录,因此返回空结果。

解决方案

  1. 调整参数传入规则:调用get_searched_ipinfo前,无需为搜索词添加外层单引号,仅保留两侧百分号即可,即传入函数的$term格式为%search term%。
  2. 可对代码做进一步简化优化,参考代码如下:
public function get_searched_ipinfo($term){
    // 若需在函数内统一处理%包裹,可打开下一行注释,调用方无需再处理
    // $term = '%' . trim($term, '%') . '%';
    $stmt = $this->connect()->prepare('SELECT * 
    FROM ipinfo 
    WHERE office LIKE ? 
    OR vlanID LIKE ? 
    OR vlanRules LIKE ? 
    OR ipType LIKE ?
    OR ipAddress LIKE ? 
    OR ipCIDR LIKE ? 
    OR ipMask LIKE ? 
    OR hostname LIKE ? 
    OR isp LIKE ? 
    OR notes LIKE ? 
    OR url LIKE ?');
    $stmt->execute(array_fill(0, 11, $term));
    return $stmt->fetchAll();
}

若需保留命名占位符写法,只需确保传入的$term无多余外层单引号,原有写法即可正常运行。

内容的提问来源于stack exchange,提问作者Don Abel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:54:03