如何在codeigniter查询中选择和解码列值

时间:2015-06-01 01:59:14

标签: php codeigniter

我有一个用户表,其中使用Codeigniter中的加密库对密码列的数据进行编码。现在,我想选择编码列进行解码并与密码的用户输入(登录验证)进行比较。这是代码。 我插入了这样的值:

$this->db->insert("my_table",Array("username"=>$this->input->post("username"),"password"=>$this->encrypt->encode($this->input->post("password"))));

现在我以这种方式验证输入:

 $data = $this->db->get("mytable");
    foreach($data as $d){
     if($d["username"] == $this->input->post("username") && $d["password"] == $this->encrypt->decode($this->input->post("password")){
    //success
    break;
    }
}

这对我来说很好,但是,我想要一个更简洁,更清洁的方法来做到这一点。您也知道,未来的编码实践。 以下是我到目前为止所做的事情:

$this->db->get_where("my_table",Array($this->encrypt->decode("password")=>$this->input->post("password")));

但是啊!这将返回错误消息。错误说:

Unknown column '0' on where clause

2 个答案:

答案 0 :(得分:0)

问题是您将解码后的密码设置为数据库列。

Array($this->encrypt->decode("password")=>$this->input->post("password"))

你需要做的事情更像是:

Array("password" => $this->encrypt->decode("password"))

答案 1 :(得分:0)

首先,如果可以解密,加密密码不是一个好主意!!!

最佳做法是加密输入,然后在数据库中选择

$this->db->select('*')
$yhis->db->from('mytable')
$this->db->where('username', $this->input->post("username"));
$this->db->where('password', $this->encrypt->encode($this->input->post("password")));
$this->db->get();

如果结果......请登录