Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CodeIgniter-strlen()期望参数1为字符串,对象为给定的_Php_Codeigniter_Php Password Hash - Fatal编程技术网

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

Php CodeIgniter-strlen()期望参数1为字符串,对象为给定的,php,codeigniter,php-password-hash,Php,Codeigniter,Php Password Hash,我使用上面的代码通过数据库中的散列来验证用户输入的密码,并使用CodeIgniter,它具有内置密码兼容功能,使函数在5.5以下的版本中工作 上面的方法应该有效,但我一直遇到这个错误: 严重性:警告消息:strlen()要求参数1为字符串, 对象给定文件名:compat/password.php行号:220 这里可能有什么问题 谢谢 您需要在变量中获取查询结果,这是对 $query = $this->db->select('password')->get_where('memb

我使用上面的代码通过数据库中的散列来验证用户输入的密码,并使用CodeIgniter,它具有内置密码兼容功能,使函数在5.5以下的版本中工作

上面的方法应该有效,但我一直遇到这个错误:

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

这里可能有什么问题


谢谢

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

$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;
}
是的

$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

阅读

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

在哪里调用strlen()?我猜您的
strlen()
正在
密码验证()函数中调用。我认为使用
$query->row(1)
的第二个参数就是问题所在。在不知道数据库对象是如何构建的情况下,我的假设是,
$query->row(1)
正在发送一个包含整行的对象,而不是密码或密码哈希字符串。错误消息就是您问题的答案。只需打开它收到错误消息的文件即可。或者,我执行了上述操作,现在我又遇到了两个错误:未定义的属性:CI_DB_pdo_result::$row试图获取非对象的属性,但这两个都只是注意到的错误?啊,我犯的一个小错误是
$rows=$query->row()
$rows=$query->row我忘记了
()
    if (password_verify($this->input->post('password'), $rows->password)) {
        return TRUE;
    } else {
        return FALSE;
    }
} else {
    return FALSE;
}