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!