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
相关产品推荐
相关产品推荐

