Fehler: „Es wird versucht, die Eigenschaft eines Nichtobjekts abzurufen“ beim Zugriff auf Datenbankergebnisse
Beim Versuch, auf Datenbankergebnisse in PHP zuzugreifen, haben Sie Möglicherweise tritt die Fehlermeldung „Es wird versucht, die Eigenschaft eines Nicht-Objekts abzurufen“ auf. Dieser Fehler tritt auf, wenn Sie versuchen, auf eine Eigenschaft eines Datenbankergebnisobjekts zuzugreifen, das nicht verfügbar ist.
Um dieses Problem zu beheben, überprüfen Sie, ob Ihre Datenbankabfrage das erwartete Ergebnis zurückgibt und ob der Datentyp der zurückgegebenen Variablen vorliegt ist richtig.
Ursprung des Fehlers
Betrachten Sie diesen Beispielcode, in dem sich der betreffende Fehler manifestieren könnte:
// 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 />"; }
Der Fehler kann auftreten in der foreach-Schleife, weil mysql_fetch_object() ein einzelnes Objekt zurückgibt, kein Array von Objekten. Daher können Sie nicht wie ein Array darüber iterieren.
Lösung
Um dieses Problem zu beheben, können Sie den Code ändern, um die Ergebnisse korrekt abzurufen. Eine Möglichkeit besteht darin, mysql_fetch_array() anstelle von mysql_fetch_object() zu verwenden, was ein Array der Zeilenwerte zurückgibt.
Alternativ können Sie eine Schleife verwenden, um alle Zeilen abzurufen und in einem Array zu speichern:
$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 />"; }
Zusätzliche Überlegungen
Erwägen Sie die Verwendung einer Datenbankabstraktionsschicht wie PDO anstelle der veralteten MySQL-Funktionen. PDO bietet eine modernere und sicherere Möglichkeit, mit Datenbanken zu interagieren.
Um beispielsweise mit PDO eine einzelne Zeile als Objekt abzurufen:
$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; }
Das obige ist der detaillierte Inhalt vonWarum erhalte ich beim Zugriff auf Datenbankergebnisse in PHP die Fehlermeldung „Es wird versucht, die Eigenschaft eines Nichtobjekts abzurufen'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!