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 ?

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 ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-08 04:10:02709parcourir

Why Am I Getting the

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!

Déclaration:
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