Rumah >pangkalan data >tutorial mysql >Mengapa saya mendapat ralat 'Cuba mendapatkan harta bukan objek' dalam PHP apabila mengakses hasil pangkalan data?
Mengatasi Ralat Akses Harta Bukan Objek dalam PHP
Mesej ralat "Notis: Cuba mendapatkan harta bukan objek" biasanya berlaku apabila cuba mengakses sifat objek yang tidak dimulakan dengan betul atau tidak wujud. Dalam kod yang disediakan, ralat ini timbul kerana isu dengan fungsi mysql_fetch_object().
Fungsi mysql_fetch_object() mendapatkan semula satu baris daripada set hasil sebagai objek. Dalam halaman kawalan anda, anda menggunakan fungsi ini dengan betul untuk mengambil rekod menu sisi tunggal:
$results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id`='".$menu."' ORDER BY `id` ASC LIMIT 1", $con); $sidemenus = mysql_fetch_object($results);
Walau bagaimanapun, dalam halaman paparan anda, anda cuba melelakan pembolehubah $sidemenus seolah-olah ia adalah tatasusunan daripada objek:
foreach ($sidemenus as $sidemenu): echo $sidemenu->mname."<br />"; endforeach;
Andaian ini tidak betul kerana mysql_fetch_object() mengembalikan objek, bukan tatasusunan objek. Untuk menyelesaikan isu ini, anda mempunyai dua pilihan:
1. Gunakan gelung sementara:
Anda boleh menggunakan gelung sementara untuk mengulangi set hasil dan mendapatkan semula setiap rekod menu sisi sebagai objek:
$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;
Pendekatan ini mencipta tatasusunan objek sidemenu, membolehkan anda mengulanginya mengikut keperluan.
2. Gunakan PDO (Diutamakan):
PDO ialah lapisan abstraksi pangkalan data yang lebih moden dan disyorkan yang menyediakan keselamatan dan fleksibiliti yang lebih baik. Menggunakan PDO, anda boleh mendapatkan semula data sebagai objek menggunakan kaedah fetchAll(PDO::FETCH_OBJ). Begini cara anda melakukannya:
$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;
Atas ialah kandungan terperinci Mengapa saya mendapat ralat 'Cuba mendapatkan harta bukan objek' dalam PHP apabila mengakses hasil pangkalan data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!