Beim Ausführen einer Datenbankabfrage mit der MySQLi-Erweiterung kann es vorkommen, dass Fehler „Schwerwiegender Fehler: Aufruf einer Mitgliedsfunktion fetch_assoc() für ein Nicht-Objekt.“ Dieser Fehler tritt auf, wenn die Abfrage fehlschlägt und die resultierende MySQLi-Ergebnismenge null ist.
Im angegebenen Codeausschnitt tritt der Fehler auf, weil die Variable $result danach nicht auf Fehler überprüft wird Die Abfrage wird ausgeführt. Daher ist es möglich, dass $result null ist, wenn die Abfrage fehlschlägt, was dazu führt, dass der nachfolgende Aufruf von fetch_assoc() fehlschlägt.
Um dieses Problem zu beheben, muss überprüft werden Ergebnis des mysqli_query()-Aufrufs bei Fehlern. Wenn die Abfrage fehlschlägt, sollte eine Ausnahme ausgelöst werden, um den Fehler anzuzeigen. Der überarbeitete Code unten:
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; }
Durch das Hinzufügen der if (!$result)-Prüfung stellt der Code sicher, dass alle Datenbankfehler ordnungsgemäß behandelt werden und eine entsprechende Ausnahme ausgelöst wird.
Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „Aufruf einer Mitgliedsfunktion fetch_assoc() für ein Nicht-Objekt' in MySQLi?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!