Heim >Backend-Entwicklung >PHP-Tutorial >Warum erhalte ich beim Zugriff auf Datenbankergebnisse in PHP die Fehlermeldung „Es wird versucht, die Eigenschaft eines Nichtobjekts abzurufen'?

Warum erhalte ich beim Zugriff auf Datenbankergebnisse in PHP die Fehlermeldung „Es wird versucht, die Eigenschaft eines Nichtobjekts abzurufen'?

Barbara Streisand
Barbara StreisandOriginal
2024-11-08 04:10:02720Durchsuche

Why Am I Getting the

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn