活动记录 - 受影响的行始终返回 1



我正在尝试使用活动记录更改密码代码。这工作正常,但我需要知道密码是否已成功更改或当前密码实际上是错误的。

我正在使用受影响的行来查看受影响的记录数。该值应为 1 或 0,当密码已成功更改时为 1,在未更改密码时为 0(即输入的当前密码是错误的。受影响的行永远不会返回超过 1,因为用户名是唯一的。所以它应该按照我接近它的方式工作。但它似乎不起作用,因为受影响的行函数始终返回 1。

这是代码控制器:

function changepass() {
    $this->form_validation->set_rules('pass', 'Password', 'required|matches[passconf]|min_length[6]|max_length[12]');
    $this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');
    if ($this->form_validation->run() == false) {
        //if not valid
        $this->session->set_flashdata('message', validation_errors());
        redirect('profile');
    } else {
        //if valid
        $current = $this->input->post('current');
        $change = $this->input->post('pass');
        $id = $this->input->post('id');
        $flag = $this->profile_model->update_pass($current, $change, $id);
        if ($flag = true) {// If Successful
            $this->session->set_flashdata('message', $flag);
        } else { // If Unsuccessful
            $this->session->set_flashdata('message', 'Current Password is not valid');
        }
        redirect('profile');
    }
}

型:

function update_pass($current,$change,$id) {
  $data = array('pass'=>$change);
  $this->db->where('id',$id);
  $this->db->where('pass',$current);
  $this->db->update('users',$data);
  return ($this->db->affected_rows());
}

像这样更改模型

function update_pass($current, $change, $id) {
    $data = array('pass' => $change);
    $this->db->where('id', $id);
    $this->db->where('pass', $current);
    $this->db->update('users', $data);
    if ($this->db->affected_rows() > 0) {
        return true;
    } else {
        return false;
    }
}

并通过添加"=="而不是"="来更改控制器if语句

if($flag == TRUE)// If Successful
{
    $this->session->set_flashdata('message', $flag);
}
可能是

由于查询缓存。轮到此特定查询的查询缓存并尝试。

// Turn caching off for this one query 
  $this->db->cache_off();
  $data = array('pass'=>$change);
  $this->db->where('id',$id);
  $this->db->where('pass',$current);
  $this->db->update('users',$data);
  return ($this->db->affected_rows());
function update_pass($current, $change, $id)
{
  $data = array('pass'=>$change);
  $this->db->where('id',$id);
  $this->db->where('pass',$current);
  $this->db->update('users',$data);
  //comment the return
  //return ($this->db->affected_rows());
  // echo formatted last query
  echo '<pre>';
  echo $this->db->last_query();
  echo '</pre>';
  die();
 }

您确定提供了正确的变量来执行更新吗?试试这个,你的模型,然后测试你phpmyadmin 或者打开profiler以查看正在运行哪些查询以及正在传递哪些参数。

或者你可以试试

var_dump($this->db->affected_rows());

看看它返回了什么。

试试这段代码

function update_pass($current,$change,$id){
 $data = array('pass'=>$change);
 $this->db->where('id',$id);
 $this->db->where('pass',$current);
 $this->db->update('users',$data);
 $query = $this->db->affected_rows();
 if($query > 0){
    return true;
 }else{
    return false;
 }
}

相关内容

  • 没有找到相关文章

最新更新