2015-05-20 64 views
6

問題是它顯示來自db的所有行,而不是僅顯示那些包含搜索關鍵字的行:請幫助我。如何編寫像查詢這樣的codeigniter

public function search($data) 
{ 

    $name = $data["name"]; 
    $surname = $data["surname"]; 

    $this->db->select('*'); 
    $this->db->from('workers'); 
    $this->db->like('name', '%' . $name . '%'); 
    $this->db->or_like('surname', '%' . $surname . '%'); 

    $query = $this->db->get();  

回答

3

你寫CI像查詢錯誤way.Look的documentation怎麼寫正確

您的查詢應該是這樣this.No需要添加%。如果你不通過類似函數的第三個參數,CI加它們。

$this->db->select('*'); 
$this->db->from('workers'); 
$this->db->like('name', $name); 
$this->db->or_like('surname', $surname); 

$query = $this->db->get(); 

更好的做一些像這樣的有效數據。

$this->db->select('*'); 
$this->db->from('workers'); 
if($name) 
{ 
    $this->db->or_like('name', $name); 
} 
if($surname) 
{ 
    $this->db->or_like('surname', $surname); 
} 
$query = $this->db->get(); 
0

Shaiful是正確的,你喜歡的語句被錯誤地寫,但我只是想延長到這一點,你必須要小心,在活動記錄or_條款。在笨這些不使用支架,所以下面是罰款:

$this->db->select('*'); 
$this->db->like('name', $name); 
$this->db->or_like('surname', $surname); 
$query = $this->db->get('workers'); 

它產生:

SELECT * FROM `workers` WHERE `name` LIKE `%$name%` OR `surname` LIKE `%$surname%`; 

但如果你在稍後的日期延長查詢,以下將無法正常工作:

$this->db->select('*'); 
$this->db->where('id', $id); 
$this->db->like('name', $name); 
$this->db->or_like('surname', $surname); 
$query = $this->db->get('workers'); 

這產生:

SELECT * FROM `workers` WHERE `id`=`$id` AND `name` LIKE `%$name%` OR `surname` LIKE `%$surname%`; 

第二個示例的問題是WHERE子句由於後面的SQL中的OR而變爲可選。

Codeigniter 3引入了使用括號的功能,如果稍後有可能會使查詢變得更加複雜,我建議採用以下方法。

所以,在我看來,一個更安全的方法使用or_條款時,應該是:

$query = $this->db->select('*')->from('workers') 
     ->group_start() 
       ->like('name', $name) 
       ->or_like('surname', $surname) 
     ->group_end() 
->get(); 

在當前的例子,雖然,有什麼Shaiful沒有給出任何問題,它是完全笨2兼容。

相關問題