Start · Sprachen · PHP · Referenz · pg_field_is_null

pg_field_is_null

Funktion

Prüft, ob ein bestimmtes Feld in einer PostgreSQL-Ergebnismenge den SQL-Wert <code>NULL</code> enthält.

seit PHP 4.2.0 Kategorie: db

Signatur

pg_field_is_null(PgSql\Result $result, int|string $row_or_field, int|string $field = ?): int|false

Beschreibung

pg_field_is_null() ermöglicht es, gezielt festzustellen, ob ein Feldwert in einer PostgreSQL-Abfrageantwort dem SQL-Wert NULL entspricht. Dies ist notwendig, weil PHP NULL und einen leeren String ('') unterschiedlich behandelt, während in SQL NULL das Fehlen eines Wertes bedeutet.

Die Funktion kann auf zwei Arten aufgerufen werden: Entweder werden Zeilennummer und Feldname/-index übergeben, oder — wenn nur zwei Argumente übergeben werden — arbeitet die Funktion ohne explizite Zeilenangabe direkt mit dem Feldbezeichner. In der gebräuchlichsten Form gibt man Zeilennummer (0-basiert) und Feldname oder Feldindex an.

Der Rückgabewert 1 bedeutet, dass das Feld NULL enthält, 0 dass es einen Nicht-NULL-Wert enthält, und false im Fehlerfall (z. B. ungültiger Feldname oder Zeilenindex). Diese Funktion ist besonders nützlich, wenn Datenbankfelder optionale Werte enthalten und vor der Weiterverarbeitung geprüft werden muss, ob tatsächlich ein Wert vorhanden ist.

In modernem Code (PHP 8.1+) wird das PgSql\Result-Objekt verwendet; ältere PHP-Versionen nutzen eine Ressource vom Typ resource.

Parameter

Name Typ Default Beschreibung
$result Pflicht PgSql\Result Das PostgreSQL-Ergebnisobjekt, das von Funktionen wie pg_query() oder pg_execute() zurückgegeben wurde.
$row_or_field Pflicht int|string Wenn drei Argumente übergeben werden: die 0-basierte Zeilennummer (int). Wenn nur zwei Argumente übergeben werden (ohne field): der Feldname (string) oder Feldindex (int), wobei die aktuelle interne Zeilenposition verwendet wird.
$field int|string Der Feldname als string oder der 0-basierte Feldindex als int. Wird nur übergeben, wenn auch eine explizite Zeilennummer als zweites Argument angegeben wurde.

Rückgabewert

Typ
int|false
Beschreibung
Gibt 1 zurück, wenn das Feld NULL ist, 0 wenn das Feld einen Nicht-NULL-Wert enthält, und false bei einem Fehler (z. B. ungültiger Zeilenindex oder unbekannter Feldname).

Beispiele

NULL-Prüfung eines bestimmten Feldes nach einer Abfrage

<?php
$conn = pg_connect("host=localhost dbname=testdb user=postgres password=secret");
if (!$conn) {
    die('Verbindung fehlgeschlagen.');
}

$result = pg_query($conn, "SELECT id, name, beschreibung FROM produkte LIMIT 5");
if (!$result) {
    die('Abfrage fehlgeschlagen: ' . pg_last_error($conn));
}

for ($row = 0; $row < pg_num_rows($result); $row++) {
    $id = pg_fetch_result($result, $row, 'id');
    // Prüfen, ob das Feld 'beschreibung' in dieser Zeile NULL ist
    if (pg_field_is_null($result, $row, 'beschreibung')) {
        echo "Zeile $row (ID: $id): Beschreibung ist NULL\n";
    } else {
        $beschreibung = pg_fetch_result($result, $row, 'beschreibung');
        echo "Zeile $row (ID: $id): Beschreibung = $beschreibung\n";
    }
}

pg_free_result($result);
pg_close($conn);
?>
Zeile 0 (ID: 1): Beschreibung ist NULL Zeile 1 (ID: 2): Beschreibung = Ein tolles Produkt Zeile 2 (ID: 3): Beschreibung ist NULL

Verwendung mit Feldindex statt Feldname

<?php
$conn = pg_connect("host=localhost dbname=testdb user=postgres password=secret");
$result = pg_query($conn, "SELECT vorname, nachname, email FROM benutzer WHERE id = 42");

if (pg_num_rows($result) === 0) {
    echo "Kein Benutzer gefunden.";
} else {
    // Feldindex 2 entspricht 'email'
    if (pg_field_is_null($result, 0, 2)) {
        echo "E-Mail-Adresse nicht angegeben (NULL).\n";
    } else {
        echo "E-Mail: " . pg_fetch_result($result, 0, 'email') . "\n";
    }
}

pg_free_result($result);
pg_close($conn);
?>
E-Mail-Adresse nicht angegeben (NULL).

// Wichtig · Fallstricke

Wichtig: Verwechseln Sie SQL-NULL nicht mit einem leeren String. Ein Feld mit dem Wert '' ist nicht NULLpg_field_is_null() gibt in diesem Fall 0 zurück. Nur ein tatsächlich fehlender Wert (kein Eintrag in der Datenbankspalte) liefert 1.

Der Feldindex ist 0-basiert. Ein falscher Index oder ein nicht existierender Feldname führt zum Rückgabewert false. Prüfen Sie diesen Fall mit === false, da sowohl 0 als auch false in einem lockeren Vergleich (==) gleich ausgewertet werden könnten.

Ab PHP 8.1 wird die frühere Ressource (resource) durch das Objekt PgSql\Result ersetzt. Ältere Ressourcen werden jedoch weiterhin akzeptiert.