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

為什麼我在 PHP 中收到「嘗試取得非物件的屬性」錯誤?

Susan Sarandon
發布: 2024-12-05 00:02:11
原創
631 人瀏覽過

Why Am I Getting a

「嘗試取得非物件的屬性」 - 了解問題

錯誤「嘗試取得非物件的屬性」通常在您嘗試存取不存在的物件的屬性時發生。對於您的情況,此問題出現在以下程式碼中:

<?php
  include 'pages/db.php';
  $results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id`='".$menu."' ORDER BY `id` ASC LIMIT 1", $con);
  $sidemenus = mysql_fetch_object($results);
?>
登入後複製

當您執行此程式碼時,問題在於 mysql_fetch_object() 的使用。此函數傳回側邊選單表中單行的物件表示形式,但您嘗試將其作為視圖頁面中的物件陣列進行迭代:

<?php foreach ($sidemenus as $sidemenu): ?>
  <?php echo $sidemenu->mname."<br />"; ?>
<?php endforeach; ?>
登入後複製
登入後複製

解決問題

要修復此錯誤,您需要從表中檢索所需的所有行並將它們儲存在陣列中。您可以透過使用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;
}
登入後複製

透過在視圖頁面中使用此物件數組,您可以迭代它並存取每個物件的屬性:

<?php foreach ($sidemenus as $sidemenu): ?>
  <?php echo $sidemenu->mname."<br />"; ?>
<?php endforeach; ?>
登入後複製
登入後複製

替代方法PDO

處理這種情況的另一個選擇是使用PHP的 PDO 擴展,它提供了更現代、物件導向的資料庫互動。使用PDO,您可以從sidemenu 表中取得所有行並將它們儲存在陣列中,如下所示:

$pdo = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');

$stmt = $pdo->prepare("SELECT * FROM sidemenu WHERE `menu_id`=:menu_id ORDER BY `id` ASC LIMIT 1");
$stmt->execute([':menu_id' => $menu]);

$sidemenus = $stmt->fetchAll(PDO::FETCH_OBJ);
登入後複製

在此程式碼中:

  • PDO 類別被實例化為連接到資料庫。
  • prepare() 方法用來準備 SQL 查詢。
  • The execute() 方法使用提供的參數執行查詢。
  • fetchAll(PDO::FETCH_OBJ) 方法以物件陣列的形式取得所有結果。

然後您可以使用視圖頁面中的這個物件數組,類似於前面描述的方法。

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

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