Start · Sprachen · PHP · Referenz · dba_fetch

dba_fetch

Funktion

Liest den Datensatz zu einem angegebenen Schlüssel aus einer geöffneten DBA-Datenbank und gibt den zugehörigen Wert zurück.

seit PHP 4.0.0 Kategorie: db

Signatur

dba_fetch(string $key, resource $handle): string|false

Beschreibung

dba_fetch() liest den zu einem Schlüssel gehörenden Wert aus einer DBA-Datenbank (DBM-ähnliche Datenbank), die zuvor mit dba_open() oder dba_popen() geöffnet wurde. DBA steht für Database Abstraction Layer und ermöglicht den Zugriff auf verschiedene einfache Schlüssel-Wert-Datenbanken wie gdbm, db4, cdb oder inifile.

Die Funktion gibt den gespeicherten Wert als Zeichenkette zurück oder false, wenn der Schlüssel nicht gefunden wurde oder ein Fehler aufgetreten ist. Sie eignet sich besonders für schnelle Lookups in eingebetteten, dateibasierten Schlüssel-Wert-Stores, ohne einen vollwertigen Datenbankserver zu benötigen.

Im Zusammenspiel mit dba_exists() lässt sich prüfen, ob ein Schlüssel vorhanden ist, bevor er gelesen wird. Für iteratives Durchlaufen aller Einträge bieten sich dba_firstkey() und dba_nextkey() an.

Hinweis: Bei einigen Treibern (z. B. inifile) kann der zweite Parameter $handle durch ein optionales Gruppen-Argument ergänzt werden, das in älteren Signaturen an zweiter Position steht. Ab PHP 7.3.14 und 7.4.2 wurde die Signatur vereinheitlicht.

Parameter

Name Typ Default Beschreibung
$key Pflicht string Der Schlüssel, dessen zugehöriger Wert aus der Datenbank gelesen werden soll.
$handle Pflicht resource Das Datenbank-Handle, das von dba_open() oder dba_popen() zurückgegeben wurde.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den gespeicherten Wert als Zeichenkette zurück, wenn der Schlüssel existiert. Gibt false zurück, wenn der Schlüssel nicht gefunden wurde oder ein Fehler aufgetreten ist.

Beispiele

Einzelnen Wert aus einer DBA-Datenbank lesen

<?php
// Datenbank im Lese-/Schreibmodus öffnen (Treiber: gdbm)
$handle = dba_open('/tmp/beispiel.db', 'c', 'gdbm');

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

// Datensatz schreiben
dba_insert('benutzername', 'Maria Muster', $handle);

// Datensatz lesen
$wert = dba_fetch('benutzername', $handle);

if ($wert !== false) {
    echo 'Gefundener Wert: ' . $wert;
} else {
    echo 'Schlüssel nicht gefunden.';
}

dba_close($handle);
?>
Gefundener Wert: Maria Muster

Alle Einträge iterieren und per dba_fetch lesen

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

if ($handle === false) {
    die('Datenbankfehler.');
}

// Einige Datensätze einfügen
dba_insert('apfel',  '0.49', $handle);
dba_insert('banane', '0.99', $handle);
dba_insert('kirsche', '2.50', $handle);

// Alle Einträge ausgeben
$schluessel = dba_firstkey($handle);
while ($schluessel !== false) {
    $wert = dba_fetch($schluessel, $handle);
    echo $schluessel . ' => ' . $wert . PHP_EOL;
    $schluessel = dba_nextkey($handle);
}

dba_close($handle);
?>
apfel => 0.49 banane => 0.99 kirsche => 2.50

// Wichtig · Fallstricke

Verfügbarkeit: Die DBA-Erweiterung ist nicht standardmäßig aktiviert. Sie muss beim Kompilieren von PHP mit --enable-dba sowie dem gewünschten Treiber (z. B. --with-gdbm) eingebunden werden. Auf vielen Systemen ist das Paket php-dba über den Paketmanager verfügbar.

Parallelzugriff: DBA-Datenbanken unterstützen nur eingeschränktes Locking. Bei gleichzeitigen Schreibzugriffen aus mehreren Prozessen kann es zu Datenkorruption kommen. Verwenden Sie dba_open() mit den Modi r (nur lesen) oder w (schreiben) mit Bedacht und setzen Sie ggf. eigene Sperrmechanismen ein.

Rückgabewert prüfen: Da dba_fetch() false zurückgibt, wenn der Schlüssel nicht existiert, sollte stets ein strikter Vergleich (!== false) verwendet werden, da leere Strings als Werte möglich sind.