2015-05-20 13 views
6

Vấn đề là nó hiển thị tất cả các hàng từ db thay vì chỉ hiển thị những hàng có chứa từ khóa tìm kiếm: Xin hãy giúp tôi.Cách viết codeigniter như truy vấn

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();  

Trả lời

3

Bạn đã viết CI như sai truy vấn way.Look các documentation làm thế nào để viết nó đúng

truy vấn của bạn nên được như this.No cần phải thêm %. CI thêm chúng nếu bạn không vượt qua tham số thứ 3 của hàm tương tự.

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

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

Làm tốt hơn với một số dữ liệu hợp lệ như thế này.

$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 là đúng, phát biểu như các ngươi đã ghi sai nhưng tôi chỉ muốn mở rộng lên này mà bạn phải cẩn thận với or_ khoản trong Active Record. Trong CodeIgniter những không sử dụng dấu ngoặc, vì vậy sau đây là tốt:

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

Nó tạo:

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

Nhưng nếu bạn mở rộng truy vấn vào một ngày sau, sau đây sẽ không hoạt động chính xác:

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

này tạo ra:

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

Vấn đề với ví dụ thứ hai là mệnh đề WHERE trở thành tùy chọn do sau OR trong SQL.

Codeigniter 3 đã mang đến khả năng sử dụng dấu ngoặc và tôi khuyên bạn nên sử dụng phương pháp sau nếu có khả năng truy vấn của bạn sẽ trở nên phức tạp hơn sau này.

Vì vậy, một cách tiếp cận an toàn hơn trong quan điểm của tôi khi sử dụng or_ khoản sẽ là:

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

Trong ví dụ hiện tại của bạn, mặc dù không có vấn đề với những gì Shaiful đã đưa ra và nó hoàn toàn CodeIgniter 2 tương thích.

Các vấn đề liên quan