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
Libérer: 2024-11-08 01:13:03
original
463 Les gens l'ont consulté

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);
Copier après la connexion

Et sur votre page d'affichage :

foreach ($sidemenus as $sidemenu): 
  echo $sidemenu->mname."<br />";
endforeach; 
Copier après la connexion

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;
}
Copier après la connexion

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);
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal