БД пуста, но выполнение PDO возвращает bool (True) - PullRequest
0 голосов
/ 12 мая 2018

Я хочу войти в школьную систему для учеников и преподавателей.

    $query = $pdo->prepare("SELECT `username`, `password` FROM `teachers` WHERE `username` = :username");
    $result = $query->execute(array(
    ":username" => $username));

    if($result) {
       $_SESSION["username"]["who"] = array($username, "teacher");
       echo("<script>location.href = 'home.php';</script>");
    } else {
       $query = $pdo->prepare("SELECT `username`, `password` FROM `students` WHERE `username` = :username");
       $result = $query->execute(array(
       ":username" => $username));

       if($result) {
          $_SESSION["username"]["who"] = array($username, "student");
          echo("<script>location.href = 'home.php';</script>");
       } else {
          echo("<script>alert('Error.'); location.href = 'index.php';</script>");
       }
    }

У меня есть только одно имя пользователя в базе данных моих студентов. Но если я могу попытаться войти с произвольным именем пользователя, я получу $ result = True. Почему $ result равно true, если таблицы учителей пусты?

1 Ответ

0 голосов
/ 12 мая 2018

Результатом выполнения является невыполненная инструкция.

Я рекомендую использовать fetchObject :

try {
  $statement = $pdo->prepare("SELECT 1 as `exists` FROM `teachers` WHERE `username` = :username LIMIT 1");
  $statement->execute([":username" => $username]);

  $teacher = $statement->fetchObject();

  if ($teacher) {
    // success here
    $_SESSION['user'] = ['username' => $username, 'role' => 'teacher'];

    session_write_close(); // gracefully closing session
    header('Location: /home.php');
    exit(0);
  }
  throw new Exception('User not found');
}
catch (Exception $exception) {
  header('Location: index.php');
  exit(-1);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...