Getting MySQL syntax error using CodeIgniter LIKE active record

左心房为你撑大大i 提交于 2019-12-11 06:55:39

问题


This is my code

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

every thing works well until there is a ' and NOT " in the $query.

The error is: $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\\\\\\'%'

What am I missing here?

Dump of passed query:

Debug #1 of 1: string(2) "d'"

回答1:


You don't need to escape manually the parameter while you're using CI Active Record Class, Just remove the $this->db->escape_str() method:

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

From CI user Guide:

$this->db->like()

Note: All values passed to this method are escaped automatically.

Update

Okay, here's 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)

As I expected, AR added only one backslash to escape the $query. I run this test on CI v2.1.4.

Please revise your logic, and if you don't find anything wrong, share more necessary code, I'm all ears.




回答2:


use

$query = mysql_real_escape_string($query);

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


来源:https://stackoverflow.com/questions/18417441/getting-mysql-syntax-error-using-codeigniter-like-active-record

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!