Maison >base de données >tutoriel mysql >Pourquoi est-ce que j'obtiens une erreur « Essayer d'obtenir la propriété d'un non-objet » en PHP ?

Pourquoi est-ce que j'obtiens une erreur « Essayer d'obtenir la propriété d'un non-objet » en PHP ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-05 00:02:11700parcourir

Why Am I Getting a

"Essayer d'obtenir la propriété d'un non-objet" - Comprendre le problème

L'erreur "Essayer d'obtenir la propriété d'un non-objet" se produit généralement lorsque vous tentez d'accéder à une propriété d'un objet qui n'existe pas. Dans votre cas, ce problème se pose dans le code ci-dessous :

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

Lorsque vous exécutez ce code, le problème réside dans l'utilisation de mysql_fetch_object(). Cette fonction renvoie une représentation objet d'une seule ligne dans la table du menu latéral, mais vous essayez de la parcourir sous la forme d'un tableau d'objets dans votre page d'affichage :

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

Résoudre le problème

Pour corriger cette erreur, vous devez récupérer toutes les lignes dont vous avez besoin dans la table et les stocker dans un tableau. Vous pouvez y parvenir en utilisant une boucle while pour parcourir les résultats et remplir un tableau avec les objets pertinents :

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

En utilisant ce tableau d'objets dans votre page d'affichage, vous pouvez le parcourir et accéder les propriétés de chaque objet :

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

Approche alternative avec PDO

Une autre option pour Pour gérer cette situation, il faut utiliser l'extension PDO de PHP, qui fournit une interaction de base de données plus moderne et orientée objet. En utilisant PDO, vous pouvez récupérer toutes les lignes de la table du menu latéral et les stocker dans un tableau comme suit :

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

Dans ce code :

  • La classe PDO est instanciée pour se connecter à la base de données.
  • La méthode préparer() permet de préparer la requête SQL.
  • La méthode exécuter() exécute la requête avec les paramètres fournis.
  • La méthode fetchAll(PDO::FETCH_OBJ) récupère tous les résultats sous forme de tableau d'objets.

Vous pouvez ensuite utiliser ce tableau d'objets dans votre afficher la page, similaire à la méthode décrite précédemment.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn