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

CodeIgniter - strlen() expects parameter 1 to be string, object given

$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 的版本。

上面的方法应该有效,但我一直收到此错误:

Severity: Warning Message: strlen() expects parameter 1 to be string, object given Filename: compat/password.php Line Number: 220

这可能是什么问题?

谢谢!

您需要在变量中获取查询结果,这是对

的错误使用
$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

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