只是试图从数据库中获取一些行并循环,但我得到了非对象错误。
$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工作正常并向我显示我想要包含的所有对象。我确信,就像我所有的问题,我只是忽略了一些非常简单的事情。但我真的看不到它。我通过网站有其他类似的功能,工作正常,我真的看不出差异。
答案 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.