Heim >Datenbank >MySQL-Tutorial >Warum erhalte ich in PHP die Fehlermeldung „Es wird versucht, eine Eigenschaft eines Nichtobjekts abzurufen', wenn ich auf Datenbankergebnisse zugreife?

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

Susan Sarandon
Susan SarandonOriginal
2024-12-03 17:28:10243Durchsuche

Why am I getting a

Behebung des Fehlers beim Zugriff auf Nicht-Objekt-Eigenschaften in PHP

Die Fehlermeldung „Hinweis: Es wird versucht, die Eigenschaft eines Nicht-Objekts abzurufen“ wird normalerweise angezeigt Tritt auf, wenn versucht wird, auf Eigenschaften eines Objekts zuzugreifen, das nicht ordnungsgemäß initialisiert wurde oder nicht vorhanden ist. Im bereitgestellten Code tritt dieser Fehler aufgrund eines Problems mit der Funktion mysql_fetch_object() auf.

Die Funktion mysql_fetch_object() ruft eine einzelne Zeile aus einer Ergebnismenge als Objekt ab. Auf Ihrer Kontrollseite verwenden Sie diese Funktion korrekt, um einen einzelnen Sidemenu-Datensatz abzurufen:

  $results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id`='".$menu."' ORDER BY `id` ASC LIMIT 1", $con);
  $sidemenus = mysql_fetch_object($results);

Auf Ihrer Ansichtsseite versuchen Sie jedoch, über die Variable $sidemenus zu iterieren, als wäre sie ein Array von Objekten:

  foreach ($sidemenus as $sidemenu):
    echo $sidemenu->mname."<br />";
  endforeach;

Diese Annahme ist falsch, da mysql_fetch_object() ein Objekt und kein Array von Objekten zurückgibt. Um dieses Problem zu beheben, haben Sie zwei Möglichkeiten:

1. Verwenden Sie eine While-Schleife:

Sie können eine While-Schleife verwenden, um die Ergebnismenge zu durchlaufen und jeden Sidemenu-Datensatz als Objekt abzurufen:

$results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id`='".$menu."' ORDER BY `id` ASC LIMIT 1", $con);

$sidemenus = array();
while ($sidemenu = mysql_fetch_object($results)) {
    $sidemenus[] = $sidemenu;
}

foreach ($sidemenus as $sidemenu):
    echo $sidemenu->mname."<br />";
endforeach;

Dieser Ansatz erstellt ein Array von Sidemenu-Objekte, sodass Sie sie nach Bedarf durchlaufen können.

2. PDO verwenden (bevorzugt):

PDO ist eine modernere und empfohlene Datenbankabstraktionsschicht, die verbesserte Sicherheit und Flexibilität bietet. Mit PDO können Sie Daten als Objekte mithilfe der Methode fetchAll(PDO::FETCH_OBJ) abrufen. So würden Sie es machen:

$stmt = $con->prepare("SELECT * FROM sidemenu WHERE `menu_id`=? ORDER BY `id` ASC LIMIT 1");
$stmt->execute(array($menu));
$sidemenus = $stmt->fetchAll(PDO::FETCH_OBJ);

foreach ($sidemenus as $sidemenu):
    echo $sidemenu->mname."<br />";
endforeach;

Das obige ist der detaillierte Inhalt vonWarum erhalte ich in PHP die Fehlermeldung „Es wird versucht, eine Eigenschaft eines Nichtobjekts abzurufen', wenn ich auf Datenbankergebnisse zugreife?. 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