Rumah >pembangunan bahagian belakang >tutorial php >Mengapa Saya Mendapat Ralat 'Mencuba untuk mendapatkan harta bukan objek' Semasa Mengakses Hasil Pangkalan Data dalam PHP?

Mengapa Saya Mendapat Ralat 'Mencuba untuk mendapatkan harta bukan objek' Semasa Mengakses Hasil Pangkalan Data dalam PHP?

Barbara Streisand
Barbara Streisandasal
2024-11-08 04:10:02724semak imbas

Why Am I Getting the

Ralat: "Mencuba mendapatkan harta bukan objek" Apabila Mengakses Hasil Pangkalan Data

Apabila cuba mengakses hasil pangkalan data dalam PHP, anda mungkin menghadapi ralat "Mencuba untuk mendapatkan harta bukan objek." Ralat ini berlaku apabila anda cuba mengakses sifat objek hasil pangkalan data yang tidak tersedia.

Untuk menyelesaikan isu ini, sahkan bahawa pertanyaan pangkalan data anda mengembalikan hasil yang dijangkakan dan jenis data pembolehubah yang dikembalikan adalah betul.

Asal usul Ralat

Pertimbangkan kod contoh ini di mana ralat yang dipersoalkan mungkin nyata:

// Retrieve a single row from the database
$results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id` = '{$menu}' ORDER BY `id` ASC LIMIT 1", $con);

// Attempt to access the result as an object
$sidemenus = mysql_fetch_object($results);

// Iterate over the result and display properties
foreach ($sidemenus as $sidemenu) {
    echo $sidemenu->mname . "<br />";
}

Ralat boleh berlaku dalam gelung foreach kerana mysql_fetch_object() mengembalikan satu objek, bukan tatasusunan objek. Akibatnya, anda tidak boleh mengulanginya seperti tatasusunan.

Penyelesaian

Untuk menyelesaikan isu ini, anda boleh mengubah suai kod untuk mengambil keputusan dengan betul. Satu pilihan ialah menggunakan mysql_fetch_array() dan bukannya mysql_fetch_object(), yang mengembalikan tatasusunan nilai baris.

Sebagai alternatif, anda boleh menggunakan gelung untuk mengambil semua baris dan menyimpannya dalam tatasusunan:

$sidemenus = array();
while ($sidemenu = mysql_fetch_object($results)) {
    $sidemenus[] = $sidemenu;
}

// Iterate over the sidemenus array and display properties
foreach ($sidemenus as $sidemenu) {
    echo $sidemenu->mname . "<br />";
}

Pertimbangan Tambahan

Pertimbangkan untuk menggunakan lapisan abstraksi pangkalan data seperti PDO dan bukannya fungsi MySQL yang usang. PDO menyediakan cara yang lebih moden dan selamat untuk berinteraksi dengan pangkalan data.

Sebagai contoh, untuk menggunakan PDO untuk mengambil satu baris sebagai objek:

$sth = $pdo->prepare("SELECT * FROM sidemenu WHERE `menu_id` = :menu_id ORDER BY `id` ASC LIMIT 1");
$sth->execute([':menu_id' => $menu]);
$sidemenu = $sth->fetchObject();

if ($sidemenu) {
    echo $sidemenu->mname;
}

Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'Mencuba untuk mendapatkan harta bukan objek' Semasa Mengakses Hasil Pangkalan Data dalam PHP?. 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