Start · Sprachen · PHP · Referenz · mysql_fetch_object

mysql_fetch_object

Funktion

Liest die nächste Zeile aus einem MySQL-Ergebnis und gibt sie als Objekt zurück, wobei Spaltennamen als Eigenschaften dienen.

seit PHP 4.0.0 Kategorie: db

Signatur

mysql_fetch_object(resource $result, string $class_name = 'stdClass', array $params = []): object|false

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

Typ
object|false
Beschreibung
Gibt ein Objekt zurück, dessen Eigenschaften den Spaltennamen und -werten der aktuellen Ergebniszeile entsprechen. Gibt 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);
?>
ID: 1, Name: Max Mustermann, E-Mail: max@example.com ID: 2, Name: Erika Muster, E-Mail: erika@example.com

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);
?>
Max Mustermann (max@example.com) Erika Muster (erika@example.com)

// 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.