嘗試存取非物件的屬性
嘗試從資料庫擷取資料時,遇到錯誤「嘗試取得屬性非物件的。」當當您嘗試存取null 或不存在的物件的屬性時,會發生此錯誤。
在您的特定場景中,您的控制頁上有以下代碼:
$results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id`='".$menu."' ORDER BY `id` ASC LIMIT 1", $con); $sidemenus = mysql_fetch_object($results);
在您的視圖頁面上:
foreach ($sidemenus as $sidemenu): echo $sidemenu->mname."<br />"; endforeach;
錯誤的產生是因為 mysql_fetch_object() 傳回一個對象,而不是對象數組。因此,在“視圖”頁面中,您嘗試迭代不可迭代的對象,這會導致錯誤。
解決方案:
要解決此問題,您應該:
$results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id`='".$menu."' ORDER BY `id` ASC LIMIT 1", $con); $sidemenus = array(); while ($sidemenu = mysql_fetch_object($results)) { $sidemenus[] = $sidemenu; }
這會將結果轉換為物件數組,然後您可以在「視圖」頁面中對其進行迭代。
PDO 提供了一種更現代、更有效率的與資料庫互動的方式。 PDOStatement::fetchAll(PDO::FETCH_OBJ) 傳回一個物件數組,類似於您期望從 mysql_fetch_object() 獲得的功能。
$stmt = $con->prepare("SELECT * FROM sidemenu WHERE `menu_id` = :menu_id ORDER BY `id` ASC LIMIT 1"); $stmt->bindParam(':menu_id', $menu); $stmt->execute(); $sidemenus = $stmt->fetchAll(PDO::FETCH_OBJ);
透過利用這些解決方案中的任何一個,您可以從資料庫中檢索資料並避免錯誤“嘗試獲取非物件的屬性。 “
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3