首頁 >資料庫 >mysql教程 >為什麼我在存取資料庫結果時會在 PHP 中收到「嘗試取得非物件的屬性」錯誤?

為什麼我在存取資料庫結果時會在 PHP 中收到「嘗試取得非物件的屬性」錯誤?

Susan Sarandon
Susan Sarandon原創
2024-12-03 17:28:10164瀏覽

Why am I getting a

解決PHP 中的非物件屬性存取錯誤

錯誤訊息「注意:嘗試取得非物件的屬性」通常當嘗試存取尚未正確初始化或不存在的物件的屬性時會發生。在提供的程式碼中,由於 mysql_fetch_object() 函數的問題而出現此錯誤。

mysql_fetch_object() 函數從結果集中檢索單行作為物件。在您的控制頁面中,您正確地使用此函數來獲取單個側選單記錄:

  $results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id`='".$menu."' ORDER BY `id` ASC LIMIT 1", $con);
  $sidemenus = mysql_fetch_object($results);

但是,在您的視圖頁面中,您嘗試迭代$sidemenus 變量,就好像它是一個數組一樣對象數量:

  foreach ($sidemenus as $sidemenu):
    echo $sidemenu->mname."<br />";
  endforeach;

這個假設是不正確的,因為mysql_fetch_object() 傳回一個對象,而不是對象數組。要解決此問題,您有兩個選擇:

1。使用while 循環:

您可以使用while 循環來迭代結果集並將每個側菜單記錄作為對象檢索:

$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;
}

foreach ($sidemenus as $sidemenu):
    echo $sidemenu->mname."<br />";
endforeach;

此方法創建一個數組sidemenu 對象,允許您根據需要迭代它們。

2.使用 PDO(首選):

PDO 是一種更現代且推薦的資料庫抽象層,可提供更高的安全性和靈活性。使用 PDO,您可以使用 fetchAll(PDO::FETCH_OBJ) 方法將資料作為物件檢索。操作方法如下:

$stmt = $con->prepare("SELECT * FROM sidemenu WHERE `menu_id`=? ORDER BY `id` ASC LIMIT 1");
$stmt->execute(array($menu));
$sidemenus = $stmt->fetchAll(PDO::FETCH_OBJ);

foreach ($sidemenus as $sidemenu):
    echo $sidemenu->mname."<br />";
endforeach;

以上是為什麼我在存取資料庫結果時會在 PHP 中收到「嘗試取得非物件的屬性」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn