【问题标题】:multiple where condition codeigniter多个where条件codeigniter
【发布时间】:2012-05-19 06:48:45
【问题描述】:

如何将此查询转换为活动记录?

"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 子句状态怎么样?

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

【问题讨论】:

    标签: codeigniter


    【解决方案1】:

    你可以使用数组并传递数组。

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

    【讨论】:

      【解决方案2】:

      是的,多次调用 where() 是实现此目的的一种完全有效的方法。

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

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

      【讨论】:

      • 虽然这是实现这一目标的一种方法。使用键值数组更容易
      • 知道有用,因为您可能需要在评估某些条件后扩展 where 子句。
      • 这在连接中也很有效:$this->db->where('TRIPSHEET_MAIN.id', $id); $this->db->where("CASH.tripsheet_id", $id);
      【解决方案3】:

      你可以试试这个功能多用

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

      }

      【讨论】:

        【解决方案4】:

        $wherecond = "( ( ( username ='" . $username . "' OR status='" . $status . "') AND (id='" . $id . "') ) )"; $this->db->where($wherecond);

        如果您想一次添加 AND 和 OR 条件。这会起作用。

        【讨论】:

          【解决方案5】:

          试试这个

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

          【讨论】:

          • 知道如何在此中添加 OR 条件/
          【解决方案6】:

          这个答案已经晚了,但我认为也许仍然可以提供帮助,我尝试了上述两种方法,使用两个 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();
                  }
          
              }
          

          【讨论】:

            【解决方案7】:

            你可以同时使用这样的数组:

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

            然后直接赋值:

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

            希望能帮到你。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-11-05
              • 2013-03-30
              • 1970-01-01
              • 2011-11-17
              • 2015-09-25
              • 2022-01-19
              相关资源
              最近更新 更多