CodeIgniter - strlen()期望参数1为字符串,对象为

时间:2015-06-08 13:22:30

标签: php codeigniter php-password-hash

$query = $this->db->select('password')->get_where('members', array('email' => $this->input->post('email')));

if ($query->num_rows() == 1) {
    if (password_verify($this->input->post('password'), $query->row(1))) {
        return TRUE;
    } else {
        return FALSE;
    }
} else {
    return FALSE;
}

我使用上面的代码来验证来自数据库的哈希的用户输入密码,并且我使用具有内置password_compat的CodeIgniter来使函数适用于小于5.5的版本。

以上应该可以,但我一直收到这个错误:

  

严重性:警告消息:strlen()期望参数1为字符串,   给定的对象文件名:compat / password.php行号:220

这可能是什么问题?

谢谢!

2 个答案:

答案 0 :(得分:0)

您需要在变量中获取查询结果,这是错误的使用

$query->row(1);

这将是

$rows=$query->row();
$rows->password;

检查以下代码

$query = $this->db->select('password')->get_where('members', array('email' => $this->input->post('email')));

if ($query->num_rows() == 1) {
    $rows=$query->row();// here you assign result to $rows variable

在此处查看如何将密码变量作为参数

传递
    if (password_verify($this->input->post('password'), $rows->password)) {
        return TRUE;
    } else {
        return FALSE;
    }
} else {
    return FALSE;
}

阅读Generating Query Results

答案 1 :(得分:0)

只需将$query->row(1)更改为$query->row(0)->password

即可