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

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

Susan Sarandon
發布: 2024-12-03 17:28:10
原創
164 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板