Start · Sprachen · PHP · Referenz · sqlsrv_get_field

sqlsrv_get_field

Funktion

Liest den Wert eines einzelnen Feldes aus der aktuell gelesenen Zeile eines <code>sqlsrv</code>-Abfrageergebnisses.

seit PHP 1.0.0 Kategorie: db

Signatur

sqlsrv_get_field(resource $stmt, int $fieldIndex, int $getAsType = null): mixed

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

Typ
mixed
Beschreibung
Gibt den Feldwert als PHP-Wert zurück (Typ je nach SQL-Typ oder $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);
?>
[1] Max Mustermann [2] Erika Musterfrau

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.