32

このクエリをアクティブレコードに変換するにはどうすればよいですか?

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

上記のクエリを次のように変換しようとしました:

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

where clausaステータスを使用するのはどうですか?

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

私もこれを試しました:

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

7 に答える 7

77

配列を使用して配列を渡すことができます。

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'

または、= 比較以外のことをしたい場合

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

$this->db->where($array);
于 2012-05-10T16:31:50.550 に答える
18

はい、where()を複数回呼び出すことは、これを実現するための完全に有効な方法です。

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

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

于 2012-05-10T16:33:30.440 に答える
2

多目的にこの機能を試すことができます

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;
}

}

于 2013-08-03T10:46:28.487 に答える
1

次のような配列を使用して両方を使用できます。

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

そして次のような直接割り当て:

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

お役に立てれば幸いです。

于 2016-05-27T08:31:55.657 に答える
1

この回答には遅れていますが、おそらくまだ役立つと思います.2つのwhere条件と配列を使用したメソッドを使用して、上記の両方の方法を試してみました.いくつかのテストを行いましたが、条件が実行されなかったので私は回避策を行いました、ここに私のコードがあります:

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

    }
于 2014-08-12T17:45:52.580 に答える