Signatur
Beschreibung
sqlsrv_get_field gibt den Wert eines bestimmten Feldes der aktuellen Zeile zurück, nachdem zuvor mit sqlsrv_fetch eine Zeile geladen wurde. Die Felder werden über einen nullbasierten Index adressiert, der der Spaltenreihenfolge in der SQL-Abfrage entspricht.
Optional kann über den Parameter $getAsType gesteuert werden, als welcher PHP-Datentyp das Feld zurückgeliefert wird. Dafür stehen SQLSRV_PHPTYPE_*-Konstanten zur Verfügung, z. B. SQLSRV_PHPTYPE_STRING('UTF-8') für eine UTF-8-kodierte Zeichenkette oder SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_BINARY) für binäre Daten als Stream.
Die Funktion eignet sich besonders dann, wenn gezielt nur einzelne Spalten benötigt werden oder wenn Datentypkonvertierungen explizit kontrolliert werden sollen – etwa bei BLOBs, Datumsfeldern oder Unicode-Daten, bei denen die automatische Typkonvertierung unerwünscht ist.
Im Gegensatz zu sqlsrv_fetch_array oder sqlsrv_fetch_object holt sqlsrv_get_field immer nur ein einzelnes Feld, was bei sehr breiten Ergebnismengen Ressourcen sparen kann.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $stmt Pflicht | resource | Eine gültige Statement-Ressource, die mit sqlsrv_query oder sqlsrv_execute erzeugt und mit sqlsrv_fetch auf eine Zeile positioniert wurde. |
|
| $fieldIndex Pflicht | int | Nullbasierter Index der gewünschten Spalte. Der Index richtet sich nach der Reihenfolge der Spalten im SELECT-Statement. | |
| $getAsType | int | null | Optionale SQLSRV_PHPTYPE_*-Konstante, die den gewünschten PHP-Datentyp für das zurückgelieferte Feld festlegt. Wird null übergeben, bestimmt der Treiber den Typ automatisch anhand des SQL-Typs. |
Rückgabewert
$getAsType). Bei einem Fehler wird false zurückgegeben. NULL-Datenbankwerte werden als PHP-null geliefert.Beispiele
Einzelne Felder einer Zeile auslesen
<?php
$serverName = 'localhost';
$connectionInfo = [
'Database' => 'TestDB',
'UID' => 'benutzer',
'PWD' => 'passwort',
];
$conn = sqlsrv_connect($serverName, $connectionInfo);
if (!$conn) {
die('Verbindung fehlgeschlagen: ' . print_r(sqlsrv_errors(), true));
}
$sql = 'SELECT id, vorname, nachname FROM kunden WHERE aktiv = 1';
$stmt = sqlsrv_query($conn, $sql);
if ($stmt === false) {
die('Abfrage fehlgeschlagen: ' . print_r(sqlsrv_errors(), true));
}
while (sqlsrv_fetch($stmt)) {
$id = sqlsrv_get_field($stmt, 0); // int
$vorname = sqlsrv_get_field($stmt, 1); // string
$nachname = sqlsrv_get_field($stmt, 2); // string
echo "[$id] $vorname $nachname\n";
}
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>
Binäres Feld explizit als Stream lesen
<?php
$conn = sqlsrv_connect('localhost', [
'Database' => 'MediaDB',
'UID' => 'benutzer',
'PWD' => 'passwort',
]);
$sql = 'SELECT dateiname, bilddaten FROM bilder WHERE id = ?';
$params = [42];
$stmt = sqlsrv_query($conn, $sql, $params);
if (sqlsrv_fetch($stmt)) {
$dateiname = sqlsrv_get_field($stmt, 0, SQLSRV_PHPTYPE_STRING('UTF-8'));
// Bilddaten als binären Stream liefern lassen
$stream = sqlsrv_get_field($stmt, 1, SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_BINARY));
header('Content-Type: image/jpeg');
header('Content-Disposition: inline; filename="' . $dateiname . '"');
while (!feof($stream)) {
echo fread($stream, 8192);
}
fclose($stream);
}
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>
// Wichtig · Fallstricke
Reihenfolge beachten: sqlsrv_get_field darf erst nach einem erfolgreichen Aufruf von sqlsrv_fetch verwendet werden. Wird es vor oder ohne sqlsrv_fetch aufgerufen, liefert es false.
Streams und Lesepuffer: Wenn ein Feld als Stream (SQLSRV_PHPTYPE_STREAM) abgerufen wird, muss der Stream vollständig gelesen werden, bevor das nächste Feld gelesen oder sqlsrv_fetch erneut aufgerufen werden kann – andernfalls wird der Stream verworfen.
Feldindex: Ein falscher Index führt zu false und einem Fehler im Fehler-Stack. Mit sqlsrv_field_metadata lässt sich die Spaltenzuordnung vorab ermitteln.
Sicherheit: Nutzereingaben, die in SQL-Abfragen einfließen, immer über parametrisierte Abfragen übergeben – niemals direkt in den SQL-String konkatenieren, um SQL-Injection zu verhindern.