Signatur
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
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);
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);
// 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.