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