CodeIgniter查询中WHERE等于条件加通配符无法实现LIKE行为
问题分析与解决方案
嘿,我一眼就揪出问题所在啦!你当前的SQL语句里用了AdTitle = ?来匹配文本字符串,但这是精确匹配,根本不会识别你传入的%通配符——这就是加入文本搜索后功能失效的核心原因。要实现模糊搜索,必须把=换成LIKE关键字才行!
修改后的代码
public function search($textstring, $category, $college, $limit, $offset) { // 关键修改:把AdTitle = ? 替换为 AdTitle LIKE ? $sql = "SELECT * FROM ads WHERE Category = ? AND College_id = ? AND AdTitle LIKE ?"; $query = $this->db->limit($limit, $offset)->query($sql, array($category, $college, '%' . $textstring . '%')); // 可以加这句打印最终执行的SQL,方便调试验证 echo $this->db->last_query(); echo "<pre>"; print_r($query); print_r($textstring); echo "</pre>"; return $query->result_array(); }
为什么之前部分功能正常?
仅搜索学院和分类时,你用的是精确匹配(Category = ?和College_id = ?),这和业务需求完全匹配,所以能正常返回结果;但文本搜索需要模糊匹配,=符号只会严格对比字符串内容,不会把%当作通配符处理,自然搜不到预期的产品。
额外调试小技巧
如果之后还有类似问题,可以用$this->db->last_query()打印出最终执行的SQL语句,这样能直观看到通配符是否正确拼接到查询里,帮你快速定位问题。
内容的提问来源于stack exchange,提问作者user8207090
相关产品推荐
相关产品推荐

