Maison > base de données > tutoriel mysql > Pourquoi est-ce que je reçois une erreur « Essayer d'obtenir la propriété d'un non-objet » en PHP lors de l'accès aux résultats de la base de données ?

Pourquoi est-ce que je reçois une erreur « Essayer d'obtenir la propriété d'un non-objet » en PHP lors de l'accès aux résultats de la base de données ?

Susan Sarandon
Libérer: 2024-12-03 17:28:10
original
164 Les gens l'ont consulté

Why am I getting a

Résolution de l'erreur d'accès à la propriété non-objet en PHP

Le message d'erreur "Avis : tentative d'obtention de la propriété d'un non-objet" généralement se produit lors de la tentative d'accès aux propriétés d'un objet qui n'a pas été correctement initialisé ou qui n'existe pas. Dans le code fourni, cette erreur survient en raison d'un problème avec la fonction mysql_fetch_object().

La fonction mysql_fetch_object() récupère une seule ligne d'un ensemble de résultats en tant qu'objet. Dans votre page de contrôle, vous utilisez correctement cette fonction pour récupérer un seul enregistrement de menu latéral :

  $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

Cependant, dans votre page d'affichage, vous essayez de parcourir la variable $sidemenus comme s'il s'agissait d'un tableau d'objets :

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

Cette hypothèse est incorrecte car mysql_fetch_object() renvoie un objet, pas un tableau d'objets. Pour résoudre ce problème, vous avez deux options :

1. Utilisez une boucle while :

Vous pouvez utiliser une boucle while pour parcourir l'ensemble de résultats et récupérer chaque enregistrement du menu latéral en tant qu'objet :

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

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

Cette approche crée un tableau de objets du menu latéral, vous permettant de les parcourir selon vos besoins.

2. Utiliser PDO (préféré) :

PDO est une couche d'abstraction de base de données plus moderne et recommandée qui offre une sécurité et une flexibilité améliorées. À l'aide de PDO, vous pouvez récupérer des données sous forme d'objets à l'aide de la méthode fetchAll(PDO::FETCH_OBJ). Voici comment procéder :

$stmt = $con->prepare("SELECT * FROM sidemenu WHERE `menu_id`=? ORDER BY `id` ASC LIMIT 1");
$stmt->execute(array($menu));
$sidemenus = $stmt->fetchAll(PDO::FETCH_OBJ);

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

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!

source:php.cn
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