Rumah > pangkalan data > tutorial mysql > Mengapa Saya Mendapat Ralat 'Mencuba untuk mendapatkan harta bukan objek' dalam PHP?

Mengapa Saya Mendapat Ralat 'Mencuba untuk mendapatkan harta bukan objek' dalam PHP?

Susan Sarandon
Lepaskan: 2024-12-05 00:02:11
asal
633 orang telah melayarinya

Why Am I Getting a

"Mencuba untuk mendapatkan Harta Bukan Objek" - Memahami Isu

Ralat "Mencuba untuk mendapatkan harta bukan objek" biasanya berlaku apabila anda cuba mengakses sifat objek yang tidak wujud. Dalam kes anda, isu ini timbul dalam kod di bawah:

<?php
  include 'pages/db.php';
  $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

Apabila anda melaksanakan kod ini, isu ini terletak pada penggunaan mysql_fetch_object(). Fungsi ini mengembalikan perwakilan objek bagi satu baris dalam jadual menu sisi, tetapi anda cuba untuk mengulanginya sebagai tatasusunan objek dalam halaman paparan anda:

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

Menyelesaikan Masalah

Untuk membetulkan ralat ini, anda perlu mendapatkan semula semua baris yang anda perlukan daripada jadual dan menyimpannya dalam tatasusunan. Anda boleh mencapai ini dengan menggunakan gelung sementara untuk mengulangi hasil dan mengisi tatasusunan dengan objek yang berkaitan:

$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

Dengan menggunakan tatasusunan objek ini dalam halaman paparan anda, anda boleh mengulanginya dan mengakses sifat setiap objek:

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

Pendekatan Alternatif dengan PDO

Pilihan lain untuk mengendalikan situasi ini ialah menggunakan sambungan PDO PHP, yang menyediakan interaksi pangkalan data yang lebih moden dan berorientasikan objek. Dengan menggunakan PDO, anda boleh mengambil semua baris daripada jadual menu sisi dan menyimpannya dalam tatasusunan seperti berikut:

$pdo = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');

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

$sidemenus = $stmt->fetchAll(PDO::FETCH_OBJ);
Salin selepas log masuk

Dalam kod ini:

  • Kelas PDO dibuat seketika kepada sambung ke pangkalan data.
  • Kaedah prepare() digunakan untuk menyediakan pertanyaan SQL.
  • The Kaedah execute() melaksanakan pertanyaan dengan parameter yang disediakan.
  • Kaedah fetchAll(PDO::FETCH_OBJ) mengambil semua keputusan sebagai tatasusunan objek.

Anda kemudian boleh menggunakan tatasusunan objek ini dalam halaman paparan anda, serupa dengan kaedah yang diterangkan sebelum ini.

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