Start · Sprachen · PHP · Referenz · dba_exists

dba_exists

Funktion

Prüft, ob ein angegebener Schlüssel in einer geöffneten DBA-Datenbank existiert.

seit PHP 4.0.0 Kategorie: db

Signatur

dba_exists(string|array $key, resource $handle): bool

Beschreibung

dba_exists() überprüft, ob ein bestimmter Schlüssel in der über dba_open() oder dba_popen() geöffneten DBA-Datenbank vorhanden ist. Die Funktion gibt true zurück, wenn der Schlüssel gefunden wurde, andernfalls false.

DBA (Database Abstraction Layer) ist PHPs eingebaute Schnittstelle zu dateibasierten Schlüssel-Wert-Datenbanken wie GDBM, NDBM, DB2, DB3, DBM oder CDB. dba_exists() ist besonders nützlich, um vor einem Lese- oder Schreibzugriff sicherzustellen, dass ein Schlüssel tatsächlich vorhanden ist, ohne den vollständigen Wert laden zu müssen.

Ab PHP 7.3.14 und 7.4.2 kann der Parameter key auch ein array sein, wenn der verwendete DBA-Handler (z. B. CDB) mehrere Schlüsselkomponenten unterstützt. Für die meisten Handler wird jedoch ein einfacher string übergeben.

Die Funktion ist Teil der DBA-Erweiterung, die beim Kompilieren von PHP mit den entsprechenden Flags aktiviert werden muss. Sie eignet sich besonders für schlanke, dateibasierte Speicherlösungen ohne vollständiges RDBMS.

Parameter

Name Typ Default Beschreibung
$key Pflicht string|array Der Schlüssel, dessen Existenz in der Datenbank geprüft werden soll. Bei den meisten DBA-Handlern ein einfacher string; bei manchen Handlern (z. B. CDB) kann auch ein array mit mehreren Schlüsselkomponenten übergeben werden.
$handle Pflicht resource Das Datenbankhandle, das zuvor mit dba_open() oder dba_popen() geöffnet wurde.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der angegebene Schlüssel in der Datenbank existiert, andernfalls false.

Beispiele

Prüfen, ob ein Schlüssel in einer DBA-Datenbank vorhanden ist

<?php
// Datenbank öffnen (lesen/schreiben, Handler: gdbm)
$handle = dba_open('/tmp/meine_datenbank.db', 'c', 'gdbm');

if (!$handle) {
    die('Datenbank konnte nicht geöffnet werden.');
}

// Datensatz einfügen
dba_insert('benutzer_42', 'Max Mustermann', $handle);

// Prüfen, ob der Schlüssel existiert
if (dba_exists('benutzer_42', $handle)) {
    echo 'Schlüssel "benutzer_42" existiert: ' . dba_fetch('benutzer_42', $handle);
} else {
    echo 'Schlüssel nicht gefunden.';
}

dba_close($handle);
?>
Schlüssel "benutzer_42" existiert: Max Mustermann

Bedingte Aktualisierung nur wenn Schlüssel existiert

<?php
$handle = dba_open('/tmp/konfiguration.db', 'c', 'gdbm');

if (!$handle) {
    die('Datenbank konnte nicht geöffnet werden.');
}

$schluessel = 'app_version';
$neuerWert  = '2.5.0';

if (dba_exists($schluessel, $handle)) {
    // Nur aktualisieren, wenn der Schlüssel bereits vorhanden ist
    dba_replace($schluessel, $neuerWert, $handle);
    echo 'Version aktualisiert auf: ' . dba_fetch($schluessel, $handle);
} else {
    // Neu anlegen, wenn der Schlüssel noch nicht existiert
    dba_insert($schluessel, $neuerWert, $handle);
    echo 'Version neu gesetzt: ' . dba_fetch($schluessel, $handle);
}

dba_close($handle);
?>
Version neu gesetzt: 2.5.0

// Wichtig · Fallstricke

Erweiterung aktivieren: Die DBA-Erweiterung ist nicht standardmäßig aktiv. Beim Kompilieren von PHP muss --enable-dba sowie der gewünschte Handler (z. B. --with-gdbm) angegeben werden. Unter Linux-Distributionen ist oft das Paket php-dba verfügbar.

Handler-Kompatibilität: Die Unterstützung für array-Schlüssel hängt vom jeweiligen DBA-Handler ab. Für maximale Portabilität sollte ein einfacher string als Schlüssel verwendet werden.

Datenbankdatei sperren: DBA-Datenbanken können bei parallelen Schreibzugriffen zu Race Conditions führen. Beim Öffnen mit dem Modus 'l' (locking) wird eine Datei-Sperre gesetzt, um Datenverlust zu vermeiden.