我为高级搜索编写了CodeIgniter代码。这个高级搜索只有一个列表,供用户选择。但是,我有一个问题,当搜索时,它会带来用户未选择的其他城市的结果。以下是术语的匹配代码:
$db->or_like("title", $_POST['search-term']); // OR
$db->or_like("content", $_POST['search-term']); // OR
$db->or_like("name", $_POST['search-term']); // OR
$db->or_like("keywords", $_POST['search-term']); // OR
这里是负责与所选省份匹配的部分代码:
if(isset($_POST['province']) && $_POST['province'] != "0")
{
$db->where("province", $_POST['province']);
if(isset($_POST['cities']) && $_POST['cities'] != "0")
{
$db->where("city", $_POST['cities']);
}
} // AND
下面是负责将数据放入数组的代码:
$search_result = $db->get("ads")->result_array();
还值得一提的是,当我将or_like
更改为like
时,它不会产生任何结果。
这是生成的QUERY:
SELECT * FROM (`ads`) WHERE `status` = 2 AND `province` = '5' AND `title` LIKE '%شریف%' OR `content` LIKE '%شریف%' OR `name` LIKE '%شریف%' OR `keywords` LIKE '%شریف%' ORDER BY `stars` DESC
它看起来很好,但结果不是。。。
然后尝试此查询,
SELECT * FROM (`ads`) WHERE `status` = 2 AND `province` = '5' AND(
`title` LIKE '%شریف%'
OR `content` LIKE '%شریف%' OR `name` LIKE '%شریف%' OR `keywords` LIKE '%شریف%')
ORDER BY `stars` DESC
更新:在CI中,您可以这样尝试:
$sql = "SELECT * FROM (`ads`) WHERE `status` = 2 AND `province` = '5' AND(
`title` LIKE '%شریف%'
OR `content` LIKE '%شریف%' OR `name` LIKE '%شریف%' OR `keywords` LIKE '%شریف%')
ORDER BY `stars` DESC";
$this->db->query($sql);
这会解决你的问题。
旁注:您的代码表示欢迎使用SQL注入。注意你在做什么。