使用CodeIgniter LIKE活动记录获取MySQL语法错误

时间:2013-08-24 10:16:47

标签: php sql codeigniter activerecord sql-like

这是我的代码

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();

'中有"而非$query之前,每件事情都会有效。

错误是:$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'"

2 个答案:

答案 0 :(得分:0)

在使用CI Active Record Class时,您无需手动转义参数,只需删除$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()
  

注意:传递给此方法的所有值都会自动转义。

更新

好的,这是my test-case

$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上运行此测试。

请修改你的逻辑,如果你没有发现任何错误,请分享更多必要的代码,我全都听见了。

答案 1 :(得分:0)

使用

$query = mysql_real_escape_string($query);

return $this->db
            ->select('organization')
            ->like('title',$query)
            ->or_like('description',$query)
            ->get('shop_search')
            ->num_rows();
相关问题