Start · Sprachen · PHP · Referenz · sqlsrv_fetch_object

sqlsrv_fetch_object

Funktion

Liest die nächste Zeile eines SQL-Server-Abfrageergebnisses und gibt sie als Objekt zurück.

seit PHP 1.0.0 Kategorie: db

Signatur

sqlsrv_fetch_object(resource $stmt, string $className = 'stdClass', array $ctorParams = [], int $row = SQLSRV_SCROLL_NEXT, int $offset = 0): object|false|null

Beschreibung

sqlsrv_fetch_object() ist Teil der SQLSRV-Erweiterung für Microsoft SQL Server und liest eine Zeile aus einem Abfrageergebnis. Die Spaltennamen des Resultsets werden zu Eigenschaften des zurückgegebenen Objekts. Standardmäßig wird ein stdClass-Objekt erzeugt, es kann aber auch eine eigene Klasse angegeben werden.

Wird eine eigene Klasse über $className angegeben, wird diese instanziiert und ihre Eigenschaften mit den Spaltenwerten befüllt. Konstruktor-Parameter können über das Array $ctorParams übergeben werden. Die Befüllung der Eigenschaften erfolgt nach dem Aufruf des Konstruktors.

Bei scrollbaren Cursorn (z. B. SQLSRV_CURSOR_STATIC) kann über $row und $offset gezielt auf bestimmte Zeilen zugegriffen werden. Für Forward-only-Cursor (Standard) werden diese Parameter ignoriert.

Die Funktion gibt null zurück, wenn keine weiteren Zeilen vorhanden sind, false bei einem Fehler, und andernfalls ein Objekt mit den Spaltenwerten als Eigenschaften.

Parameter

Name Typ Default Beschreibung
$stmt Pflicht resource Eine Ergebnis-Ressource, die von sqlsrv_query() oder sqlsrv_execute() zurückgegeben wurde.
$className string stdClass Name der Klasse, deren Instanz zurückgegeben werden soll. Wird der Parameter weggelassen oder 'stdClass' angegeben, wird ein generisches stdClass-Objekt zurückgegeben.
$ctorParams array [] Ein Array mit Parameterwerten, die dem Konstruktor der angegebenen Klasse übergeben werden. Wird nur ausgewertet, wenn $className gesetzt ist.
$row int SQLSRV_SCROLL_NEXT Gibt die abzurufende Zeile bei einem scrollbaren Cursor an. Mögliche Werte: SQLSRV_SCROLL_NEXT, SQLSRV_SCROLL_PRIOR, SQLSRV_SCROLL_FIRST, SQLSRV_SCROLL_LAST, SQLSRV_SCROLL_ABSOLUTE, SQLSRV_SCROLL_RELATIVE.
$offset int 0 Gibt den Versatz relativ zur durch $row definierten Position an. Wird nur verwendet, wenn $row auf SQLSRV_SCROLL_ABSOLUTE oder SQLSRV_SCROLL_RELATIVE gesetzt ist.

Rückgabewert

Typ
object|false|null
Beschreibung
Gibt ein Objekt zurück, dessen Eigenschaften den Spaltennamen des Ergebnisses entsprechen. Gibt null zurück, wenn keine weiteren Zeilen vorhanden sind. Gibt false zurück, wenn ein Fehler aufgetreten ist.

Beispiele

Einfaches Auslesen als stdClass-Objekt

<?php
$serverName = 'localhost';
$connectionInfo = ['Database' => 'Northwind', 'UID' => 'sa', 'PWD' => 'geheim'];
$conn = sqlsrv_connect($serverName, $connectionInfo);

if ($conn === false) {
    die(print_r(sqlsrv_errors(), true));
}

$sql = 'SELECT KundeID, Vorname, Nachname FROM Kunden ORDER BY Nachname';
$stmt = sqlsrv_query($conn, $sql);

if ($stmt === false) {
    die(print_r(sqlsrv_errors(), true));
}

while ($obj = sqlsrv_fetch_object($stmt)) {
    echo $obj->Vorname . ' ' . $obj->Nachname . ' (ID: ' . $obj->KundeID . ')' . PHP_EOL;
}

sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
Max Mustermann (ID: 1) Erika Muster (ID: 2)

Zeilen in eine eigene Klasse mappen

<?php
class Kunde {
    public int $KundeID;
    public string $Vorname;
    public string $Nachname;
    private string $prefix;

    public function __construct(string $prefix = 'Herr/Frau') {
        $this->prefix = $prefix;
    }

    public function getAnrede(): string {
        return $this->prefix . ' ' . $this->Vorname . ' ' . $this->Nachname;
    }
}

$serverName = 'localhost';
$connectionInfo = ['Database' => 'Northwind', 'UID' => 'sa', 'PWD' => 'geheim'];
$conn = sqlsrv_connect($serverName, $connectionInfo);

$sql = 'SELECT KundeID, Vorname, Nachname FROM Kunden ORDER BY Nachname';
$stmt = sqlsrv_query($conn, $sql);

while ($kunde = sqlsrv_fetch_object($stmt, 'Kunde', ['Dr.'])) {
    echo $kunde->getAnrede() . PHP_EOL;
}

sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
Dr. Max Mustermann Dr. Erika Muster

// Wichtig · Fallstricke

Eigenschafts-Befüllung nach dem Konstruktor: Die Spaltenwerte werden den Objekteigenschaften nach dem Aufruf des Konstruktors zugewiesen. Werden im Konstruktor Eigenschaften mit denselben Namen wie Tabellenspalten gesetzt, werden diese anschließend durch die Datenbankwerte überschrieben.

Spaltenname als Eigenschaft: Die Eigenschaftsnamen entsprechen exakt den Spaltennamen (oder Aliasen) im SQL-Statement. Bei Spaltennamen mit Sonderzeichen oder Leerzeichen kann der Zugriff über $obj->{'Spalten Name'} erforderlich sein.

Scrollbarer Cursor: Um $row und $offset nutzen zu können, muss das Statement mit einem scrollbaren Cursor erstellt werden, z. B. sqlsrv_query($conn, $sql, [], ['Scrollable' => SQLSRV_CURSOR_STATIC]).

Fehlerbehandlung: Rückgabewert false bedeutet einen Fehler — stets mit sqlsrv_errors() prüfen. null zeigt das reguläre Ende des Resultsets an.