Mencuba Mengakses Harta Bukan Objek
Semasa cuba mendapatkan semula data daripada pangkalan data, anda menghadapi ralat "Mencuba mendapatkan harta bukan objek." Ralat ini berlaku apabila anda cuba mengakses sifat objek batal atau tidak wujud.
Dalam senario khusus anda, anda mempunyai kod berikut pada halaman Kawalan anda:
$results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id`='".$menu."' ORDER BY `id` ASC LIMIT 1", $con); $sidemenus = mysql_fetch_object($results);
Dan pada halaman Lihat anda:
foreach ($sidemenus as $sidemenu): echo $sidemenu->mname."<br />"; endforeach;
Ralat berpunca kerana mysql_fetch_object() mengembalikan objek, bukan tatasusunan objek. Oleh itu, dalam halaman Paparan, anda cuba mengulangi objek yang tidak boleh diulang, yang membawa kepada ralat.
Penyelesaian:
Untuk menyelesaikan isu tersebut, anda hendaklah sama ada:
$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; }
Ini akan menukarkan keputusan kepada tatasusunan objek, yang anda kemudian boleh berulang dalam halaman Lihat anda.
PDO menyediakan cara yang lebih moden dan cekap untuk berinteraksi dengan pangkalan data. PDOStatement::fetchAll(PDO::FETCH_OBJ) mengembalikan tatasusunan objek, serupa dengan fungsi yang anda jangkakan daripada 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);
Dengan menggunakan salah satu daripada penyelesaian ini, anda boleh mendapatkan semula data daripada pangkalan data dan elakkan ralat "Mencuba mendapatkan harta bukan objek."
Atas ialah kandungan terperinci Mengapa saya mendapat ralat 'Cuba dapatkan harta bukan objek' semasa mengakses hasil pangkalan data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!