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