Signatur
Beschreibung
mysql_fetch_object() liest eine Zeile aus dem Ergebnis einer MySQL-Abfrage und gibt diese als Objekt zurück. Die Spaltennamen der Abfrage werden dabei zu Eigenschaften (Properties) des zurückgegebenen Objekts. Standardmäßig wird ein stdClass-Objekt erzeugt; optional kann jedoch auch ein eigener Klassenname angegeben werden.
Der interne Zeiger des Ergebnisses wird nach jedem Aufruf automatisch um eine Zeile weitergesetzt, sodass die Funktion in einer Schleife verwendet werden kann, bis alle Zeilen verarbeitet wurden und false zurückgegeben wird.
Gegenüber mysql_fetch_array() oder mysql_fetch_assoc() bietet diese Funktion den Vorteil, dass der Zugriff auf Spalten über die objektorientierte $row->spaltenname-Syntax erfolgt, was den Code lesbarer machen kann. Bei Verwendung eines eigenen Klassennamens werden die Eigenschaften gesetzt, bevor der Konstruktor aufgerufen wird.
Wichtig: Die gesamte mysql_*-Erweiterung ist seit PHP 5.5.0 als veraltet (deprecated) markiert und wurde in PHP 7.0.0 vollständig entfernt. Für neue Projekte sollte stattdessen mysqli oder PDO verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $result Pflicht | resource | Das MySQL-Ergebnis-Resource, das von mysql_query() zurückgegeben wurde. |
|
| $class_name | string | stdClass | Name der Klasse, die instanziiert werden soll. Wird dieser Parameter angegeben, werden die Spaltenwerte als Eigenschaften gesetzt, bevor der Konstruktor aufgerufen wird. |
| $params | array | [] | Ein optionales Array von Parametern, die dem Konstruktor der angegebenen Klasse (class_name) übergeben werden. |
Rückgabewert
false zurück, wenn keine weiteren Zeilen vorhanden sind oder ein Fehler aufgetreten ist.Beispiele
Einfache Abfrage mit stdClass-Objekt
<?php
$conn = mysql_connect('localhost', 'benutzer', 'passwort');
mysql_select_db('meine_datenbank', $conn);
$result = mysql_query('SELECT id, name, email FROM benutzer', $conn);
while ($row = mysql_fetch_object($result)) {
echo 'ID: ' . $row->id . ', Name: ' . $row->name . ', E-Mail: ' . $row->email . PHP_EOL;
}
mysql_free_result($result);
mysql_close($conn);
?>
Verwendung mit eigenem Klassennamen
<?php
class Benutzer {
public int $id;
public string $name;
public string $email;
public function getAnzeigeName(): string {
return $this->name . ' (' . $this->email . ')';
}
}
$conn = mysql_connect('localhost', 'benutzer', 'passwort');
mysql_select_db('meine_datenbank', $conn);
$result = mysql_query('SELECT id, name, email FROM benutzer LIMIT 2', $conn);
while ($benutzer = mysql_fetch_object($result, 'Benutzer')) {
echo $benutzer->getAnzeigeName() . PHP_EOL;
}
mysql_free_result($result);
mysql_close($conn);
?>
// Wichtig · Fallstricke
Deprecation / Entfernung: Die mysql_*-Erweiterung ist seit PHP 5.5.0 veraltet und wurde in PHP 7.0.0 vollständig entfernt. Code, der diese Funktion verwendet, läuft auf modernen PHP-Versionen nicht mehr. Verwende stattdessen mysqli_fetch_object() oder PDOStatement::fetchObject().
Spaltennamen mit Sonderzeichen: Enthält ein Spaltenname Zeichen, die in PHP keine gültigen Bezeichner sind (z. B. Leerzeichen oder Bindestriche), muss auf die Eigenschaften über geschweifte Klammern zugegriffen werden: $row->{'meine spalte'}.
Konstruktor-Reihenfolge: Bei Angabe eines eigenen Klassennamens werden die Eigenschaften gesetzt, bevor der Konstruktor ausgeführt wird. Dies kann dazu führen, dass im Konstruktor gesetzte Standardwerte überschrieben werden.
Sicherheit: Wie alle mysql_*-Funktionen bietet diese Funktion keinen Schutz gegen SQL-Injection. Benutzereingaben müssen zwingend mit mysql_real_escape_string() maskiert werden — besser jedoch auf Prepared Statements mit mysqli oder PDO umsteigen.