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 en PHP ?
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
Lorsque vous essayez d'accéder aux résultats de la base de données en PHP, vous peut rencontrer l'erreur « Essayer d'obtenir la propriété d'un non-objet ». Cette erreur se produit lorsque vous essayez d'accéder à une propriété d'un objet de résultat de base de données qui n'est pas disponible.
Pour résoudre ce problème, vérifiez que votre requête de base de données renvoie le résultat attendu et que le type de données de la variable renvoyée est correct.
Origine de l'erreur
Considérez cet exemple de code où l'erreur en question peut se manifester :
// Retrieve a single row from the database $results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id` = '{$menu}' ORDER BY `id` ASC LIMIT 1", $con); // Attempt to access the result as an object $sidemenus = mysql_fetch_object($results); // Iterate over the result and display properties foreach ($sidemenus as $sidemenu) { echo $sidemenu->mname . "<br />"; }
L'erreur peut se produire dans la boucle foreach car mysql_fetch_object() renvoie un seul objet, pas un tableau d'objets. Par conséquent, vous ne pouvez pas le parcourir comme un tableau.
Solution
Pour résoudre ce problème, vous pouvez modifier le code pour récupérer correctement les résultats. Une option consiste à utiliser mysql_fetch_array() au lieu de mysql_fetch_object(), qui renvoie un tableau des valeurs de la ligne.
Vous pouvez également utiliser une boucle pour récupérer toutes les lignes et les stocker dans un tableau :
$sidemenus = array(); while ($sidemenu = mysql_fetch_object($results)) { $sidemenus[] = $sidemenu; } // Iterate over the sidemenus array and display properties foreach ($sidemenus as $sidemenu) { echo $sidemenu->mname . "<br />"; }
Considérations supplémentaires
Envisagez d'utiliser une couche d'abstraction de base de données telle que PDO au lieu des fonctions MySQL obsolètes. PDO offre un moyen plus moderne et sécurisé d'interagir avec les bases de données.
Par exemple, pour utiliser PDO pour récupérer une seule ligne en tant qu'objet :
$sth = $pdo->prepare("SELECT * FROM sidemenu WHERE `menu_id` = :menu_id ORDER BY `id` ASC LIMIT 1"); $sth->execute([':menu_id' => $menu]); $sidemenu = $sth->fetchObject(); if ($sidemenu) { echo $sidemenu->mname; }
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!