Signatur
Beschreibung
mysqli_fetch_object() liest die nächste Zeile aus einem mysqli_result-Objekt und gibt sie als Objekt zurück. Standardmäßig wird ein stdClass-Objekt erzeugt, dessen Eigenschaften den Spaltennamen der Abfrage entsprechen. Alternativ kann eine eigene Klasse angegeben werden, die dann instanziiert wird.
Die Funktion eignet sich besonders, wenn die abgerufenen Datenbankzeilen direkt als typisierte Domain-Objekte weiterverarbeitet werden sollen, ohne sie manuell in Klassen umwandeln zu müssen. Der Konstruktor der Zielklasse wird dabei nach dem Befüllen der Eigenschaften aufgerufen.
Gibt null zurück, wenn keine weiteren Zeilen vorhanden sind, und false bei einem Fehler. Typischerweise wird die Funktion in einer while-Schleife verwendet, um alle Zeilen nacheinander abzurufen.
Spalten, deren Name kein gültiger PHP-Bezeichner ist, sind dennoch als Objekteigenschaft zugänglich – beispielsweise über $obj->{'my-column'}.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $result Pflicht | mysqli_result | Das mysqli_result-Objekt, das von Funktionen wie mysqli_query() oder mysqli_store_result() zurückgegeben wurde. |
|
| $class | string | stdClass | Name der Klasse, deren Instanz erzeugt werden soll. Die Spalten der Ergebniszeile werden als Eigenschaften gesetzt, bevor der Konstruktor ausgeführt wird. |
| $constructor_args | array | [] | Ein Array mit Argumenten, die an den Konstruktor der angegebenen Klasse übergeben werden. |
Rückgabewert
stdClass) mit den Spaltenwerten der aktuellen Zeile zurück. Gibt null zurück, wenn keine weiteren Zeilen vorhanden sind. Gibt false bei einem Fehler zurück.Beispiele
Alle Zeilen als stdClass-Objekte abrufen
<?php
$mysqli = new mysqli('localhost', 'benutzer', 'geheim', 'meinedb');
$result = $mysqli->query('SELECT id, name, email FROM benutzer ORDER BY id');
while ($zeile = mysqli_fetch_object($result)) {
echo 'ID: ' . $zeile->id . ', Name: ' . $zeile->name . ', E-Mail: ' . $zeile->email . PHP_EOL;
}
$result->free();
$mysqli->close();
Zeilen als eigene Klasse abrufen
<?php
class Benutzer {
public int $id;
public string $name;
public string $email;
private string $erstelltAm;
public function __construct() {
// Eigenschaften sind bereits gesetzt, wenn der Konstruktor läuft
$this->erstelltAm = date('Y-m-d H:i:s');
}
public function getLabel(): string {
return "#{$this->id}: {$this->name}";
}
}
$mysqli = new mysqli('localhost', 'benutzer', 'geheim', 'meinedb');
$result = $mysqli->query('SELECT id, name, email FROM benutzer LIMIT 3');
while ($benutzer = mysqli_fetch_object($result, Benutzer::class)) {
echo $benutzer->getLabel() . PHP_EOL;
}
$result->free();
$mysqli->close();
// Wichtig · Fallstricke
Konstruktor-Reihenfolge: Bei der Verwendung einer eigenen Klasse werden die Spalten der Ergebniszeile als Objekteigenschaften gesetzt, bevor der Konstruktor ausgeführt wird. Das ermöglicht es dem Konstruktor, auf die befüllten Werte zuzugreifen, bedeutet aber auch, dass der Konstruktor gesetzte Standardwerte überschreiben kann.
Sicherheit: Wie bei allen Datenbankabfragen sollten Benutzereingaben niemals direkt in SQL-Strings eingefügt werden. Verwende stets Prepared Statements mit mysqli_prepare() und mysqli_bind_param(), um SQL-Injection zu verhindern.
Prozedurale vs. objektorientierte Verwendung: Die Funktion kann sowohl prozedural (mysqli_fetch_object($result)) als auch objektorientiert ($result->fetch_object()) aufgerufen werden. Beide Varianten sind funktional identisch.