PHP 7.3 PDO Попытка получить свойство необъекта - PullRequest
1 голос
/ 14 мая 2019

Я хочу дать пользователю ошибку, если он войдет в систему с неправильным адресом электронной почты и паролем, часть электронной почты я получаю, но пароль продолжает давать мне эту ошибку, я использую php 7.3 pdo с сервером sql

 public function login($email, $password, $remember){
      $this->db->query('SELECT * FROM users WHERE email = :email');
      $this->db->bind('email', $email);

      $row = $this->db->single();

      $password_hash = $row->password;

      if(password_verify($password, $password_hash)) {

        if($remember){
          setcookie('email', $email, time() + 86400);
        }

        return $row;
      }else{
        return false;
      }

    }

1 Ответ

0 голосов
/ 14 мая 2019

Вы можете использовать встроенное выражение, чтобы назначить $row и убедиться, что данные для этого запроса существуют, используя isset().

public function login($email, $password, $remember)  {

    $this->db->query('SELECT * FROM users WHERE email = :email');
    $this->db->bind('email', $email);

    if(isset(($row = $this->db->single()))) {
        $password_hash = $row->password;
        // Your logic
    } else {
        // Email did not exist
    }

}

Если электронная почта не существует, $row вернетсяпустой. PS В будущем я не буду выбирать * в ваших запросах, выбирайте только то, что вам нужно.

В качестве альтернативы, вы, вероятно, хотите указать LIMIT 1.

public function login($email, $password, $remember = false) {

    // If $this->db is a PDO instance
    $stmt = $this->db->prepare('SELECT * FROM users WHERE email = ? LIMIT 1');
    $stmt->execute(array($email));

    if(isset(($row = $stmt->fetch()))) {
        // Your logic
    } else {
        // Bad email
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...