2012-05-10 41 views
25

Làm cách nào để chuyển đổi truy vấn này thành bản ghi hoạt động?nhiều nơi điều kiện codeigniter

"UPDATE table_user 
SET email = '$email', last_ip = '$last_ip' 
where username = '$username' and status = '$status'"; 

tôi đã cố gắng để chuyển đổi các truy vấn trên để:

$data = array('email' => $email, 'last_ip' => $ip); 
$this->db->where('username',$username); 
$this->db->update('table_user',$data); 

Làm thế nào về việc sử dụng nơi tình trạng clausa?

# must i write db->where two times like this? 
$this->db->where('username',$username); 
$this->db->where('status',$status); 

Tôi cũng đã cố gắng này:

$this->db->where('username',$username,'status',$status); 

Trả lời

57

bạn có thể sử dụng một mảng và vượt qua mảng.

Associative array method: 
$array = array('name' => $name, 'title' => $title, 'status' => $status); 

$this->db->where($array); 

// Produces: WHERE name = 'Joe' AND title = 'boss' AND status = 'active' 

Hoặc nếu bạn muốn làm một cái gì đó khác hơn so =

$array = array('name !=' => $name, 'id <' => $id, 'date >' => $date); 

$this->db->where($array); 
14

Vâng, nhiều cuộc gọi đến nơi() là một cách hoàn toàn hợp lệ để đạt được điều này.

$this->db->where('username',$username); 
$this->db->where('status',$status); 

http://www.codeigniter.com/user_guide/database/query_builder.html

+1

mặc dù đây là MỘT cách để đạt được điều này. Dễ sử dụng hơn một mảng khóa, giá trị – gorelative

+0

Hữu ích khi biết, vì bạn có thể cần mở rộng mệnh đề where sau khi đánh giá một số điều kiện. – AndFisher

1

Hãy thử điều này

$data = array(
       'email' =>$email, 
       'last_ip' => $last_ip 
      ); 

$where = array('username ' => $username , 'status ' => $status); 
$this->db->where($where); 
$this->db->update('table_user ', $data); 
+0

cảm ơn trả lời ,,, –

2

bạn có thể thử chức năng này cho đa mục đích

function ManageData($table_name='',$condition=array(),$udata=array(),$is_insert=false){ 
$resultArr = array(); 
$ci = & get_instance(); 
if($condition && count($condition)) 
    $ci->db->where($condition); 
if($is_insert) 
{ 
    $ci->db->insert($table_name,$udata); 
    return 0; 
} 
else 
{ 
    $ci->db->update($table_name,$udata); 
    return 1; 
} 

}

1

nó trễ cho câu trả lời này, nhưng tôi nghĩ rằng m aybe vẫn có thể giúp, tôi thử cả hai phương pháp trên, sử dụng hai nơi điều kiện và phương thức với mảng, không ai trong số đó làm việc cho tôi, tôi đã thực hiện nhiều thử nghiệm và điều kiện không bao giờ được thực hiện, vì vậy tôi đã giải quyết vấn đề, đây là của tôi mã:

public function validateLogin($email, $password){ 
     $password = md5($password); 
     $this->db->select("userID,email,password"); 
     $query = $this->db->get_where("users", array("email" => $email)); 
     $p = $query->row_array(); 

     if($query->num_rows() == 1 && $password == $p['password']){ 
      return $query->row(); 
     } 

    } 
1

bạn có thể sử dụng cả hai mảng sử dụng như:

$array = array('tlb_account.crid' =>$value , 'tlb_request.sign'=> 'FALSE'); 

và assign trực tiếp như:

$this->db->where('tlb_account.crid' =>$value , 'tlb_request.sign'=> 'FALSE'); 

tôi muốn giúp đỡ bạn.

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