Start · Sprachen · PHP · Referenz · oci_field_is_null

oci_field_is_null

Funktion

Prüft, ob das angegebene Feld in der zuletzt abgerufenen Zeile eines OCI-Statements den Wert <code>NULL</code> enthält.

seit PHP 5.0.0 Kategorie: db

Signatur

oci_field_is_null(resource $statement, int|string $column): bool

Beschreibung

oci_field_is_null gibt true zurück, wenn das angegebene Feld in der aktuell abgerufenen Datenbankzeile den SQL-Wert NULL enthält. Die Funktion ist Teil der OCI8-Erweiterung für die Arbeit mit Oracle-Datenbanken.

Die Überprüfung muss nach einem erfolgreichen Aufruf von oci_fetch, oci_fetch_row, oci_fetch_array oder einer ähnlichen Fetch-Funktion erfolgen, da die Funktion sich auf die zuletzt geladene Zeile bezieht. Das Feld kann entweder über seinen 1-basierten Spaltenindex (Integer) oder über seinen Spaltennamen (String, Groß-/Kleinschreibung wird ignoriert) angesprochen werden.

Diese Funktion ist besonders nützlich, wenn Spalten abgerufen werden, die nullable sind, und man explizit zwischen einem leeren String ('') und einem echten NULL-Wert unterscheiden muss – was in Oracle-Datenbanken wichtig ist, da Oracle leere Strings und NULL intern oft gleichbehandelt.

Alternativ kann man oci_fetch_array mit dem Flag OCI_RETURN_NULLS nutzen und anschließend mit is_null() prüfen. oci_field_is_null bietet jedoch eine direktere und semantisch klarere API für diesen Anwendungsfall.

Parameter

Name Typ Default Beschreibung
$statement Pflicht resource Ein gültiges OCI8-Statement-Handle, das durch oci_parse und anschließendes oci_execute erzeugt wurde und aus dem bereits eine Zeile abgerufen wurde.
$column Pflicht int|string Entweder der 1-basierte Spaltenindex (Integer) oder der Spaltenname (String) des zu prüfenden Feldes. Bei einem String wird die Groß-/Kleinschreibung ignoriert.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn das angegebene Feld in der aktuellen Zeile NULL ist, andernfalls false. Gibt ebenfalls false zurück, wenn ein Fehler auftritt (z. B. ungültiger Spaltenname oder -index).

Beispiele

NULL-Prüfung über Spaltenname

<?php
$conn = oci_connect('user', 'password', 'localhost/XE');
if (!$conn) {
    $e = oci_error();
    trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}

$sql = 'SELECT employee_id, first_name, manager_id FROM employees';
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);

while (oci_fetch($stmt)) {
    $id        = oci_result($stmt, 'EMPLOYEE_ID');
    $firstName = oci_result($stmt, 'FIRST_NAME');

    if (oci_field_is_null($stmt, 'MANAGER_ID')) {
        echo "Mitarbeiter $id ($firstName) hat keinen Vorgesetzten (NULL).\n";
    } else {
        $managerId = oci_result($stmt, 'MANAGER_ID');
        echo "Mitarbeiter $id ($firstName), Vorgesetzten-ID: $managerId\n";
    }
}

oci_free_statement($stmt);
oci_close($conn);
?>
Mitarbeiter 100 (Steven) hat keinen Vorgesetzten (NULL). Mitarbeiter 101 (Neena), Vorgesetzten-ID: 100 Mitarbeiter 102 (Lex), Vorgesetzten-ID: 100 ...

NULL-Prüfung über Spaltenindex

<?php
$conn = oci_connect('user', 'password', 'localhost/XE');
if (!$conn) {
    $e = oci_error();
    trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}

$sql = 'SELECT product_id, description FROM products';
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);

while (oci_fetch($stmt)) {
    $productId = oci_result($stmt, 1); // Spalte 1 = product_id

    // Spalte 2 = description (nullable)
    if (oci_field_is_null($stmt, 2)) {
        echo "Produkt $productId hat keine Beschreibung.\n";
    } else {
        $desc = oci_result($stmt, 2);
        echo "Produkt $productId: $desc\n";
    }
}

oci_free_statement($stmt);
oci_close($conn);
?>
Produkt 1: Hammer Produkt 2 hat keine Beschreibung. Produkt 3: Schraubenzieher ...

// Wichtig · Fallstricke

Oracle und leere Strings: Oracle behandelt leere Strings ('') intern als NULL. Das bedeutet, dass ein Feld, das mit einem leeren String gespeichert wurde, von oci_field_is_null ebenfalls als true zurückgegeben werden kann. Dies ist ein wichtiger Unterschied zu anderen Datenbanksystemen.

Reihenfolge beachten: Die Funktion muss nach einer Fetch-Operation aufgerufen werden. Ein Aufruf vor dem ersten oci_fetch liefert keine sinnvollen Ergebnisse.

Voraussetzung: Die OCI8-Erweiterung muss installiert und aktiviert sein. Diese ist nicht standardmäßig in jeder PHP-Installation enthalten und erfordert den Oracle Instant Client.