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

PHP+MySQL电影数据库按标题查询无结果问题求助

问题分析与解决方向

核心问题出在LIKE查询的通配符使用上:你的代码当前是精确匹配输入的标题文本,而不是包含匹配,所以无法返回标题中包含目标词的结果。

修复代码

修改getMovieByTitle方法,在参数中添加通配符%,这样就能匹配任意位置包含目标词的标题:

public function getMovieByTitle ($title) {
    $query = "SELECT * FROM movies WHERE title LIKE ?";
    $paramType = "s";
    // 在标题前后添加%,实现包含匹配
    $paramValue = array(
        "%{$title}%"
    );

    $result = $this->db_handle->runQuery($query, $paramType, $paramValue);
    return $result;
}

或者也可以在SQL语句中用CONCAT拼接通配符(适合不想修改参数的场景):

public function getMovieByTitle ($title) {
    $query = "SELECT * FROM movies WHERE title LIKE CONCAT('%', ?, '%')";
    $paramType = "s";
    $paramValue = array(
        $title
    );

    $result = $this->db_handle->runQuery($query, $paramType, $paramValue);
    return $result;
}

额外排查方向

  • 大小写问题:如果数据库的排序规则是区分大小写的(比如MySQL的utf8_bin),可以用大小写转换实现不区分匹配:
    SELECT * FROM movies WHERE LOWER(title) LIKE LOWER(CONCAT('%', ?, '%'))
    
  • 验证查询有效性:直接把拼接好的SQL语句(比如SELECT * FROM movies WHERE title LIKE '%Alien%')拿到数据库客户端执行,确认是否有对应的数据存在
  • 检查参数处理:确认runQuery方法是否正确处理了带%的字符串参数,没有错误转义通配符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:35:43