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;
}

Прочитать создание результатов запроса

Просто поменяй $query->row(1) в $query->row(0)->password

Другие вопросы по тегам