2010-09-19 46 views
8

我想运行一个查询是这样的:如何在CodeIgniter中使用LIKE查询?

SELECT * FROM table WHERE field LIKE '%search_term%' 

在CI可以绑定参数查询,如果你使用field=?但这并不为field LIKE "%?%"工作。从调试输出看来,使用的查询是field LIKE "%'search'%"

是否有另一种方法在CodeIgniter中进行搜索?

回答

16

您可以使用此查询:

SELECT * FROM table WHERE field LIKE ? 

而且随着%search%而不是search结合。

你应该知道这个查询在MySQL中会很慢。您可能希望查看自由文本搜索(Lucene,Sphinx或MySQL内置的自由文本搜索功能)。

+0

谢谢,这工作。这不是我脚本的主要部分,所以速度不是问题。 – DisgruntledGoat 2010-09-19 14:26:52

+0

感谢您使用MySQL自由文本参考! – 2014-03-12 20:17:34

0

我能理解CI是加引号,传递FALSE作为第三个参数,同时绑定以防止CI添加引号。

2

这是笨活动记录类

$this->db->select('*'); 
$this->db->like('columnname','both'); 
$query=$this->db->get("tablesname"); 
$result=$query->result_array(); 
if(count($result)) 
{ 
return $result; 
} 
else 
{ 
return FALSE; 
} 

你应该尝试this..I认为它帮助你.. 都意味着%COLUMNNAME%, 装置之前%列名, 手段后COLUMNNAME%

1
$search_term=$this->input->post('textboxName'); 
$search_term="%".$search_term."%"; 
$sql="SELECT * FROM table WHERE field LIKE ? "; 
$query=$this->db->query($sql,array($search_term)); 
$res=$query->result(); 
+0

这已经在7年前回答了。 – DisgruntledGoat 2017-04-20 11:57:09

+0

是的。这是一个字符串在like子句中的情况的答案。但我在Like子句中查询变量的地方挣扎着。如果将其定义为%variable_name%,则它不起作用。我找到了解决方案。这就是我回答的原因。 – 2017-04-20 13:23:13