CodeIgniter - strlen() ожидает, что параметр 1 будет строкой, объект задан
$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;
}
Я использую приведенный выше код для проверки пароля ввода пользователя с помощью хэша из базы данных, и я использую CodeIgniter, который имеет встроенный password_compat, чтобы функции работали для версий менее 5.5.
Выше должно работать, но я продолжаю получать эту ошибку:
Важность: Предупреждение: strlen() ожидает, что параметр 1 будет строкой, объект задан Имя файла: compat/password.php Номер строки: 220
В чем может быть проблема здесь?
Спасибо!
2 ответа
Решение
Вам нужно получить результат запроса в переменной, и это неправильное использование
$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;
}
Прочитать создание результатов запроса