我在codeigniter中有簡單的數據庫查詢,但是我無法讓搜索與通配符一起工作。這是我的代碼:Codeigniter喜歡與通配符(%)
$this->db->like('film.title',"%$query%");
$this->db->escape_like_str($query);
$res = $this->db->get('film');
如果我刪除通配符(%),然後搜索工作正常。另外$查詢只是用戶輸入的字符串。任何幫助表示讚賞。
我在codeigniter中有簡單的數據庫查詢,但是我無法讓搜索與通配符一起工作。這是我的代碼:Codeigniter喜歡與通配符(%)
$this->db->like('film.title',"%$query%");
$this->db->escape_like_str($query);
$res = $this->db->get('film');
如果我刪除通配符(%),然後搜索工作正常。另外$查詢只是用戶輸入的字符串。任何幫助表示讚賞。
$this->db->like()
自動添加%s和逃逸的字符串。因此,所有你需要的是
$this->db->like('title', $query);
$res = $this->db->get('film');
參考見CI的文檔Active Record Class (CI 2)或Query Builder Class (CI 3)。
它不這樣工作。如果我搜索讓我們說死硬,這發現它,因爲標題匹配。如果我只是使用Die或Hard,沒有發現任何東西。如果我使用帶有字符串值的SQL,它可以正常工作。 – 2013-04-26 00:54:42
我的不好我在程序中有進一步的錯誤。 – 2013-04-26 01:03:11
對於'%$ query',你可以使用'$ this-> db-> like('title',$ query,'before')'和'$ query%',你可以使用'$ this-> db->就像在答案中的鏈接所說的那樣('標題',$查詢,'之後')'。 – Mehmed 2013-10-24 07:53:24
如果你不想使用通配符(%),你可以傳遞給可選的第三個參數'none'。
$this->db->like('title', 'match', 'none');
// Produces: WHERE title LIKE 'match'
皮草全部喜歡,你可以用戶:
$this->db->like('title',$query);
對於%$查詢,你可以使用
$this->db->like('title', $query, 'before');
和$查詢%可以使用
$this->db->like('title', $query, 'after');
一次搜索多個字段可以像這樣完成...
function search($search)
{
$sql = "SELECT * FROM some_table
WHERE UPPER(a_name) LIKE ?
OR
UPPER(a_full_name) LIKE ?
OR
UPPER(a_city) LIKE ?
OR
UPPER(a_code) LIKE ?
";
$arr = array_map(array($this,"wrapLIKE"),array($search, $search, $search, $search));
$r = $this->db->query($sql, $arr);
return $r;
}
function wrapLIKE($string)
{
return strtoupper("%$string%");
}
$this->db->like('title', 'match', 'before');
// Produces: WHERE title LIKE '%match'
$this->db->like('title', 'match', 'after');
// Produces: WHERE title LIKE 'match%'
$this->db->like('title', 'match', 'both');
// Produces: WHERE title LIKE '%match%'
嘗試沒有$這個 - > DB-> escape_like_str($查詢); – Spec 2013-04-26 00:42:50
但不要忘記$ this-> db-> like('film.title',$ query,before);是一個非常昂貴的搜索,因爲mysql不能爲此使用索引。更好地使用全文索引 – Michael 2016-07-05 21:39:41