」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼在存取資料庫結果時出現「嘗試取得非物件的屬性」錯誤?

為什麼在存取資料庫結果時出現「嘗試取得非物件的屬性」錯誤?

發佈於2024-11-18
瀏覽:665

Why am I getting the

嘗試存取非物件的屬性

嘗試從資料庫擷取資料時,遇到錯誤「嘗試取得屬性非物件的。」當當您嘗試存取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() 傳回一個對象,而不是對象數組。因此,在“視圖”頁面中,您嘗試迭代不可迭代的對象,這會導致錯誤。

解決方案:

要解決此問題,您應該:

  • 將結果轉換為array:
$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:

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