这是我的代码
return $this->db
->select('organization')
->like('title',$this->db->escape_str($query))
->or_like('description',$this->db->escape_str($query))
->get('shop_search')
->num_rows();
在CCD_ 3中存在CCD_ 1和NOT CCD_。
错误为:$query="d'"
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%' OR `description` LIKE '%d'''''''%'' at line 3
SELECT `organization` FROM `default_shop_search` WHERE `title` LIKE '%d'''''''%' OR `description` LIKE '%d'''''''%'
我在这里错过了什么?
已传递查询的转储:
Debug #1 of 1: string(2) "d'"
使用CI活动记录类时不需要手动转义参数,只需删除$this->db->escape_str()
方法即可:
return $this->db
->select('organization')
->like('title', $query)
->or_like('description', $query)
->get('shop_search')
->num_rows();
来自CI用户指南:
$this->db->like()
注意:传递到此方法的所有值都会自动转义。
更新
好的,这是我的测试用例:
$query = "e'";
$res = $this->db
->select()
->like('title', $query)
->or_like('description', $query)
->get('shop_search')
->num_rows();
var_dump($this->db->last_query());
// Output: string(96) "SELECT * FROM (`myPrefix_shop_search`) WHERE `title` LIKE '%e''%' OR `description` LIKE '%e''%'"
var_dump($res);
// Output: int(1)
正如我所料,AR只添加了一个反斜杠来转义$query
。我在CI v2.1.4上运行此测试。
请修改你的逻辑,如果你没有发现任何错误,分享更多必要的代码,我洗耳恭听。
使用
$query = mysql_real_escape_string($query);
return $this->db
->select('organization')
->like('title',$query)
->or_like('description',$query)
->get('shop_search')
->num_rows();