Maison >développement back-end >tutoriel php >Pourquoi est-ce que j'obtiens l'erreur « Essayer d'obtenir la propriété d'un non-objet » lors de l'accès aux résultats de la base de données ?

Pourquoi est-ce que j'obtiens l'erreur « Essayer d'obtenir la propriété d'un non-objet » lors de l'accès aux résultats de la base de données ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-08 01:13:03404parcourir

Why am I getting the

Essayer d'accéder à la propriété d'un non-objet

Lors de la tentative de récupération des données d'une base de données, vous rencontrez l'erreur « Essayer d'obtenir la propriété du non-objet." Cette erreur se produit lorsque vous essayez d'accéder à une propriété d'un objet nul ou inexistant.

Dans votre scénario spécifique, vous avez le code suivant sur votre page Contrôle :

$results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id`='".$menu."' ORDER BY `id` ASC LIMIT 1", $con);
$sidemenus = mysql_fetch_object($results);

Et sur votre page d'affichage :

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

L'erreur provient du fait que mysql_fetch_object() renvoie un objet, pas un tableau d'objets. Par conséquent, dans la page Affichage, vous tentez de parcourir un objet non itérable, ce qui entraîne l'erreur.

Solution :

Pour résoudre le problème, vous devrait soit :

  • Convertir le résultat en un tableau :
$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;
}

Cela convertira les résultats en un tableau d'objets, que vous peut ensuite parcourir votre page d'affichage.

  • Utiliser PDO :

PDO fournit un moyen plus moderne et plus efficace d'interagir avec les bases de données. PDOStatement::fetchAll(PDO::FETCH_OBJ) renvoie un tableau d'objets, similaire à la fonctionnalité que vous attendiez de 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);

En utilisant l'une de ces solutions, vous pouvez récupérer les données de la base de données et évitez l'erreur "Essayer d'obtenir la propriété d'un non-objet."

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