“注意:当我看到对象存在时,试图获取非对象的属性”

时间:2012-03-25 18:39:46

标签: php sql pdo

只是试图从数据库中获取一些行并循环,但我得到了非对象错误。

    $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 个答案:

答案 0 :(得分:2)

除非您已指定要使用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() documentation.