Rumah > pembangunan bahagian belakang > tutorial php > Mengapa saya mendapat ralat 'Cuba dapatkan harta bukan objek' semasa mengakses hasil pangkalan data?

Mengapa saya mendapat ralat 'Cuba dapatkan harta bukan objek' semasa mengakses hasil pangkalan data?

Barbara Streisand
Lepaskan: 2024-11-08 01:13:03
asal
404 orang telah melayarinya

Why am I getting the

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);
Salin selepas log masuk

Dan pada halaman Lihat anda:

foreach ($sidemenus as $sidemenu): 
  echo $sidemenu->mname."<br />";
endforeach; 
Salin selepas log masuk

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:

  • Tukar hasil kepada tatasusunan:
$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;
}
Salin selepas log masuk

Ini akan menukarkan keputusan kepada tatasusunan objek, yang anda kemudian boleh berulang dalam halaman Lihat anda.

  • Gunakan PDO:

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);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan