Reputation: 366
Just trying to get some rows out of a database and loop through but I am get the non-object error.
$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 />");
}
Not really certain what the error is because the print_r is working fine and showing me all the objects which I am trying to include. I'm sure like all of my questions I am just overlooking something incredibly simple. But I really cannot see it. I have other similar functions through the site which work fine and I can't see the differences really.
Upvotes: 1
Views: 3129
Reputation: 270727
fetchAll()
returns an array unless you have specified the class to return with PDO::FETCH_CLASS
. So in this case, you should be accessing $lesson
by array elements rather than object properties:
$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 />");
}
If you must get these as an object and have a Lesson
class, you can do it this way:
$lessons = $stmt->fetchAll(PDO::FETCH_CLASS, "Lesson");
This assumes the Lesson
class takes no parameters to its constructor. This is detailed in the fetchAll()
documentation.
Upvotes: 2