我写了一个简单的查询来搜索数据库中的关键字.
$keyword = "keyword sample";
$keyword = str_replace(" ", "%", $keyword);
$this->db->select('*')->from('table')
->like('column', "%".$keyword."%")->get();
Run Code Online (Sandbox Code Playgroud)
现在Codeigniter生成的查询是这样的:
SELECT * FROM (`table`) WHERE `column` LIKE '%keyword\%sample%'
Run Code Online (Sandbox Code Playgroud)
\查询中的尾随在哪里?这样做会进行错误的搜索,而不会返回db中实际存在的数据.我已经检查了所有内容,但我编写的代码似乎没有任何错误.请帮忙!
Erm*_*egu 19
你只需这样尝试:
$this->db->select('*')
$this->db->from('table');
$this->db->like('column', $keyword);
return $this->db->get()->result_array();
Run Code Online (Sandbox Code Playgroud)
如果要控制放置通配符(%)的位置,可以使用可选的第三个参数.您的选项是"之前","之后"和"两者"(这是默认值).
例:
$this->db->select('*')
$this->db->from('table');
$this->db->like('column', $keyword, 'before');
return $this->db->get()->result_array();
Run Code Online (Sandbox Code Playgroud)
如果您不想使用通配符(%),则可以将选项'none'传递给可选的第三个参数.
例:
$this->db->select('*')
$this->db->from('table');
$this->db->like('column', $keyword, 'none');
return $this->db->get()->result_array();
Run Code Online (Sandbox Code Playgroud)
但是,对于你的例子,你必须要搜索"%keyword sample%",或喜欢"%keyword%" OR "%simple%";
例如:
$this->db->like('column', 'keyword simple');
// Produces: WHERE column LIKE '%keyword simple%'
Run Code Online (Sandbox Code Playgroud)
要么
$this->db->like('column', 'keyword');
$this->db->or_like('column', 'simple');
// Produces: WHERE column LIKE '%keyword%' OR column LIKE '%simple%'
Run Code Online (Sandbox Code Playgroud)
更多信息,您可以阅读CodeIgniter用户指南
Sol*_*ear 13
如果你在CodeIgniter的内部挖掘一下,你会注意到该$this->db->like()函数会转义它包含的特殊字符 - 当然包括%.
我认为like()不会对您的特殊需求有所帮助.我猜你最好的选择是绕过问题并使用where包含你的LIKE子句的函数:
$this->db->select('*')->from('table')->where("column LIKE '%$keyword%'")->get()->result_array();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
68476 次 |
| 最近记录: |