活动记录 - 受影响的行总是返回1

时间:2013-06-11 03:16:36

标签: codeigniter codeigniter-2 rows-affected

好吧,我正在尝试使用活动记录更改密码。这工作正常,但我需要知道密码是否成功更改或当前密码是否实际上是错误的。 所以,我使用受影响的行来查看有多少记录受到影响。成功更改密码时,该值应为1或0;如果未更改密码,则该值应为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());
    }

4 个答案:

答案 0 :(得分:2)

像这样改变你的模型

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

答案 1 :(得分:0)

可能是由于查询缓存。转换此特定查询的查询缓存并尝试。

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

答案 2 :(得分:0)

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

看看它的回归。

答案 3 :(得分:0)

试试这段代码

Blocked a frame with origin "http:/xxx.com" from accessing a cross-origin frame.