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
Barbara Streisandasal
2024-11-08 01:13:03402semak imbas

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);

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:

  • 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;
}

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);

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!

Kenyataan:
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