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
Libérer: 2024-12-05 00:02:11
original
631 Les gens l'ont consulté

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

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

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

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

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

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!

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