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.
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().
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!