2012-05-10 15 views
25

¿Cómo puedo convertir esta consulta en registro activo?multiple donde condition codeigniter

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

Me trataron de convertir la consulta anterior a:

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

¿Y si uso el estado en que fue cerrada?

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

También probé esto:

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

Respuesta

57

puede utilizar una matriz y pasar la matriz.

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' 

O si usted quiere hacer algo que no sea = comparación

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

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

Sí, varias llamadas a donde() es una forma perfectamente válida para lograr esto.

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

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

+1

aunque esta es UNA forma de lograr esto. Es mucho más fácil usar una matriz de clave, valores – gorelative

+0

. Es útil saber, ya que es posible que necesites extender una cláusula where después de evaluar alguna condición. – AndFisher

1

Prueba este

$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

gracias por la respuesta ,,, –

2

puede probar esta función para usos múltiples

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

es tarde para esta respuesta, pero creo metro aybe todavía puede ayudar, pruebo los dos métodos anteriores, usando dos donde las condiciones y el método con la matriz, ninguno de esos me funciona, hice varias pruebas y la condición nunca se ejecutó, así que hice una solución, aquí está mi código:

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

se puede utilizar tanto en la matriz como su uso:

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

y asignar directa como:

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

Deseo ayudarte.