Как я могу получить данные, используя PDO - PullRequest
0 голосов
/ 06 мая 2018

у меня есть 3 таблицы в базе данных. Первая таблица для информации для входа в систему, вторая таблица для книг и третья таблица имеют user_id и book_id (внешний ключ). когда конкретный пользователь вводит свое имя и пароль, я показываю, какая у него книга. что не так в моем коде .. он просто реализует isAuthenticated и он работает .. но он не отображал книги почему?

эта функция для входа в систему

public function isAuthenticated()
{
    $query = "SELECT 1 FROM loginUser WHERE username = :username AND password = :password";
    $statment = $this->db->prepare($query);

    $statment->execute(
        array(
            ':username' => $this->username,
            ':password' => $this->Password
        ));
    $result = $statment->fetchColumn();

    $this->isAuthenticated= ($result == "1");
    return $this->isAuthenticated;
}

и эта функция для извлечения книги

public function getBooks()
{
    //SELECT loginUser.username, Library.nameOfBook FROM loginUser JOIN userBook JOIN Library ON userBook.user_id = loginUser.id AND userBook.book_id = Library.id WHERE loginUser.username="loay";
    $query = "SELECT Library.nameOfBook FROM loginUser JOIN userBook JOIN Library ON userBook.user_id = loginUser.id AND userBook.book_id = Library.id WHERE loginUser.username=':username'";
    $statment = $this->db->prepare($query);
    $statment->execute();
    $result = $statment->fetchAll();
    $this->isAuthenticated= ($result == "1");

    foreach($result as $row){
        echo $row['nameOfBook'] . "<br/>";
    }
    return $this->isAuthenticated;
}

и здесь я создаю объект из класса в index.php

<?php
include_once('User.php');

if(isset($_POST['submit'])){

    $username = $_POST["user"];
    $password = $_POST["pass"];

    $object = new User();
    $object->username= $username;
    $object->Password=$password;

    if( $object->isAuthenticated() ){
        echo "User Verified";
        $object->getBooks();
    }
    else{
      echo "Wrong User Name Or Password";
    }
}
?>

1 Ответ

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

Вы устанавливаете заполнитель в запросе для getBooks() неправильно:

loginUser.username=':username'

Поскольку у вас есть кавычки вокруг заполнителя, он будет искать пользователя, которого буквально называют :username. Должно быть:

loginUser.username = :username

Затем вам нужно передать имя пользователя при выполнении запроса (как вы делаете для входа в систему):

$statment->execute([
    ':username' => $this->username
]);

Предложение: Я бы удалил строку this->isAuthenticated= ($result == "1"); из этого метода, поскольку в этом контексте это не имеет никакого смысла. Запрос книг не должен влиять на аутентификацию. Точнее, вы даже не можете выполнить этот запрос без аутентифицированного пользователя.

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