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
Freigeben: 2024-12-03 17:28:10
Original
164 Leute haben es durchsucht

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);
Nach dem Login kopieren

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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage