


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 ?
Nov 08, 2024 am 04:10 AMErreur : "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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

11 meilleurs scripts de raccourcissement d'URL PHP (gratuit et premium)

Travailler avec les données de session Flash dans Laravel

Misque de réponse HTTP simplifié dans les tests Laravel

Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST

Construisez une application React avec un Laravel Back End: Partie 2, React

12 meilleurs scripts de chat PHP sur Codecanyon
