2012-03-25 63 views
1

試圖從數據庫中獲取一些行並循環但我得到了非對象錯誤。「注意:試圖獲取非對象的屬性」,當我可以看到對象存在時

$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

中詳述爲什麼你爲每個課程運行循環並立即返回?還提供錯誤轉儲。是否在線「返回$少...」? – 2012-03-25 18:42:29

+1

1)你爲什麼在循環中調用'return'? 'return $ lesson-> lessonID;'2)你定義了'PDO :: ATTR_DEFAULT_FETCH_MODE'來返回對象嗎?如果不是,它將返回數組。 – 2012-03-25 18:43:05

+0

錯誤是什麼?另外,結果集是否爲空? – Yaniro 2012-03-25 18:43:11

回答

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.

相關問題