Codeigniter: Weird behaviour of $this->db->like()

后端 未结 3 873
悲哀的现实
悲哀的现实 2020-12-16 19:19

I\'ve written a simple query for searching a keyword in the database.

$keyword = \"keyword sample\"; 
$keyword = str_replace(\" \", \"%\", $keyword);   

$th         


        
相关标签:
3条回答
  • 2020-12-16 19:27

    Use the escape_like_str() method.

    The escape_like_str() method should be used when strings are to be used in LIKE conditions so that LIKE wildcards %, _ in the string are also properly escaped. It cannot automatically add the ESCAPE ! condition for you, and so you’ll have to manually do that.

    Hope it helps.

    $keyword = "keyword sample"; 
    $sql = "SELECT id FROM table WHERE column LIKE '%" .
    $this->db->escape_like_str($keyword)."%' ESCAPE '!'";
    

    Source:- https://www.codeigniter.com/userguide3/database/queries.html

    0 讨论(0)
  • 2020-12-16 19:32

    You just try it like this:

    $this->db->select('*')
    $this->db->from('table');
    $this->db->like('column', $keyword);
    return $this->db->get()->result_array();
    

    If you want to control where the wildcard (%) is placed, you can use an optional third argument. Your options are 'before', 'after' and 'both' (which is the default).

    example:

    $this->db->select('*')
    $this->db->from('table');
    $this->db->like('column', $keyword, 'before');
    return $this->db->get()->result_array();
    

    If you do not want to use the wildcard (%) you can pass to the optional third argument the option 'none'.

    example:

    $this->db->select('*')
    $this->db->from('table');
    $this->db->like('column', $keyword, 'none');
    return $this->db->get()->result_array();
    

    BUT, for your example you must need to search like "%keyword sample%", or like "%keyword%" OR "%simple%";

    For example:

    $this->db->like('column', 'keyword simple');
    // Produces: WHERE column LIKE '%keyword simple%' 
    

    OR

    $this->db->like('column', 'keyword');
    $this->db->or_like('column', 'simple');
    // Produces: WHERE column LIKE '%keyword%' OR column LIKE '%simple%'  
    

    More, you can read CodeIgniter User Guide

    0 讨论(0)
  • 2020-12-16 19:45

    If you dig a bit into CodeIgniter's internals, you'll notice that the $this->db->like() function escapes special characters it contains - including, of course, %.

    I don't think like() will help you much with your particular needs. Your best bet, I guess, would be to bypass the problem and use a where function containing your LIKE clause:

    $this->db->select('*')->from('table')->where("column LIKE '%$keyword%'")->get()->result_array();
    
    0 讨论(0)
提交回复
热议问题