«Уведомление: попытка получить свойство не-объекта», когда я вижу, что объекты существуют - PullRequest
1 голос
/ 25 марта 2012

Просто пытаюсь вывести некоторые строки из базы данных и пройти через них, но я получаю не-объектную ошибку.

    $db = classes_pdoDB::getConnection();
    $query = "SELECT *
              FROM lesson
              WHERE userID=:userID";
    $stmt = $db->prepare($query);
    $stmt->execute(array(':userID' => $userID));
    $lessons = $stmt->fetchAll();

    foreach ($lessons as $lesson){

        print_r ($lesson);

        $page->addToBody ("<div class=\"editLessonEntry\">
            <p><a href=\"editLesson.php?lessonid=" . $lesson->lessonID . "\" >" . $lesson->lessonTitle . "</a></p>
            <p>" . $lesson->lessonSummary . " </p>
        </div>
        <hr />");

    }

Не совсем уверен, что ошибка, потому что print_r работает нормально и показываетмне все объекты, которые я пытаюсь включить.Я уверен, что, как и все мои вопросы, я просто пропускаю что-то невероятно простое.Но я действительно не вижу этого.У меня есть другие похожие функции на сайте, которые работают нормально, и я не вижу различий на самом деле.

1 Ответ

2 голосов
/ 25 марта 2012

fetchAll() возвращает массив, если вы не указали класс для возврата с PDO::FETCH_CLASS. Так что в этом случае вы должны обращаться к $lesson по элементам массива, а не по свойствам объекта:

$lessons = $stmt->fetchAll();

foreach ($lessons as $lesson){

    print_r ($lesson);

    $page->addToBody ("<div class=\"editLessonEntry\">
        <p><a href=\"editLesson.php?lessonid=" . $lesson['lessonID'] . "\" >" . $lesson['lessonTitle'] . "</a></p>
        <p>" . $lesson['lessonSummary'] . " </p>
    </div>
    <hr />");
 }

Если вы должны получить их как объект и иметь класс Lesson, вы можете сделать это следующим образом:

$lessons = $stmt->fetchAll(PDO::FETCH_CLASS, "Lesson");

Предполагается, что класс Lesson не принимает параметров в своем конструкторе. Это подробно описано в документации fetchAll().

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