"Mencuba untuk mendapatkan Harta Bukan Objek" - Memahami Isu
Ralat "Mencuba untuk mendapatkan harta bukan objek" biasanya berlaku apabila anda cuba mengakses sifat objek yang tidak wujud. Dalam kes anda, isu ini timbul dalam kod di bawah:
<?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); ?>
Apabila anda melaksanakan kod ini, isu ini terletak pada penggunaan mysql_fetch_object(). Fungsi ini mengembalikan perwakilan objek bagi satu baris dalam jadual menu sisi, tetapi anda cuba untuk mengulanginya sebagai tatasusunan objek dalam halaman paparan anda:
<?php foreach ($sidemenus as $sidemenu): ?> <?php echo $sidemenu->mname."<br />"; ?> <?php endforeach; ?>
Menyelesaikan Masalah
Untuk membetulkan ralat ini, anda perlu mendapatkan semula semua baris yang anda perlukan daripada jadual dan menyimpannya dalam tatasusunan. Anda boleh mencapai ini dengan menggunakan gelung sementara untuk mengulangi hasil dan mengisi tatasusunan dengan objek yang berkaitan:
$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; }
Dengan menggunakan tatasusunan objek ini dalam halaman paparan anda, anda boleh mengulanginya dan mengakses sifat setiap objek:
<?php foreach ($sidemenus as $sidemenu): ?> <?php echo $sidemenu->mname."<br />"; ?> <?php endforeach; ?>
Pendekatan Alternatif dengan PDO
Pilihan lain untuk mengendalikan situasi ini ialah menggunakan sambungan PDO PHP, yang menyediakan interaksi pangkalan data yang lebih moden dan berorientasikan objek. Dengan menggunakan PDO, anda boleh mengambil semua baris daripada jadual menu sisi dan menyimpannya dalam tatasusunan seperti berikut:
$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);
Dalam kod ini:
Anda kemudian boleh menggunakan tatasusunan objek ini dalam halaman paparan anda, serupa dengan kaedah yang diterangkan sebelum ini.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'Mencuba untuk mendapatkan harta bukan objek' dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!