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