Maison >développement back-end >tutoriel php >Comment corriger l'erreur « Appel à une fonction membre fetch_assoc() sur un non-objet » dans MySQLi ?

Comment corriger l'erreur « Appel à une fonction membre fetch_assoc() sur un non-objet » dans MySQLi ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-07 20:22:16443parcourir

How to Fix the

Dépannage "Appel à une fonction membre fetch_assoc() sur un non-objet"

Lors de l'exécution d'une requête de base de données à l'aide de l'extension mysqli, il est possible de rencontrer le error "Erreur fatale : appel à une fonction membre fetch_assoc() sur un non-objet." Cette erreur se produit lorsque la requête échoue et que l'ensemble de résultats mysqli résultant est nul.

Analyse du problème

Dans l'extrait de code donné, l'erreur se produit car la variable $result n'est pas vérifiée pour les erreurs après la requête est exécutée. Par conséquent, il est possible que $result soit nul si la requête a échoué, provoquant l'échec de l'appel ultérieur à fetch_assoc().

Solution

Pour résoudre ce problème, il est nécessaire de vérifier la résultat de l'appel d'erreurs à mysqli_query(). Si la requête échoue, une exception doit être levée pour indiquer l'erreur. Le code révisé ci-dessous :

function get_recent_highs($view_deleted_images = false)
{
    $lower = $this->database->conn->real_escape_string($this->page_size * ($this->page_number - 1));
    $query = "SELECT image_id, date_uploaded FROM `images` ORDER BY ((SELECT SUM( image_id=`images`.image_id ) FROM `image_votes` AS score) / (SELECT DATEDIFF( NOW( ) , date_uploaded ) AS diff)) DESC LIMIT " . $this->page_size . " OFFSET $lower";
    $result = $this->database->query($query);

    if (!$result) {
        throw new Exception("Database Error [{$this->database->errno}] {$this->database->error}");
    }

    $page = array();
    while($row = $result->fetch_assoc())
    {
        try
        {
            array_push($page, new Image($row['image_id'], $view_deleted_images));
        }
        catch(ImageNotFoundException $e)
        {
            throw $e;
        }
    }

    return $page;
}

En ajoutant la vérification if (!$result), le code garantit que toutes les erreurs de base de données sont traitées correctement et qu'une exception appropriée est levée.

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