Signatur
Beschreibung
dba_nextkey() iteriert über die Schlüssel einer DBA-Datenbank und gibt den jeweils nächsten Schlüssel zurück. Die Iteration muss zuvor mit dba_firstkey() gestartet worden sein, das den ersten Schlüssel liefert und den internen Zeiger zurücksetzt.
Die Funktion ist nützlich, wenn alle Einträge einer DBA-Datenbank (z. B. DBM, GDBM, Berkeley DB) sequenziell durchlaufen werden sollen, ohne die Schlüssel vorher zu kennen. Typischerweise wird sie in einer while-Schleife zusammen mit dba_fetch() eingesetzt.
Zu beachten ist, dass die Reihenfolge der Schlüssel implementierungsabhängig ist und nicht zwangsläufig der Einfügereihenfolge entspricht. Parallele Schreibzugriffe während der Iteration können zu unvorhersehbarem Verhalten führen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $dba Pflicht | Dba\Connection | Ein gültiges DBA-Datenbankhandle, das zuvor mit dba_open() oder dba_popen() geöffnet wurde. |
Rückgabewert
string zurück, oder false, wenn keine weiteren Schlüssel vorhanden sind oder ein Fehler aufgetreten ist.Beispiele
Alle Schlüssel und Werte einer DBA-Datenbank durchlaufen
<?php
$db = dba_open('/tmp/test.db', 'c', 'gdbm');
// Einige Einträge einfügen
dba_insert('name', 'Alice', $db);
dba_insert('stadt', 'Berlin', $db);
dba_insert('land', 'Deutschland', $db);
// Alle Schlüssel-Wert-Paare iterieren
$key = dba_firstkey($db);
while ($key !== false) {
$value = dba_fetch($key, $db);
echo $key . ' => ' . $value . PHP_EOL;
$key = dba_nextkey($db);
}
dba_close($db);
Schlüssel zählen und filtern
<?php
$db = dba_open('/tmp/produkte.db', 'r', 'gdbm');
$anzahl = 0;
$gefunden = [];
$key = dba_firstkey($db);
while ($key !== false) {
$anzahl++;
// Nur Schlüssel, die mit 'artikel_' beginnen
if (str_starts_with($key, 'artikel_')) {
$gefunden[] = $key;
}
$key = dba_nextkey($db);
}
echo 'Gesamt: ' . $anzahl . PHP_EOL;
echo 'Artikel-Einträge: ' . count($gefunden) . PHP_EOL;
dba_close($db);
// Wichtig · Fallstricke
Reihenfolge: Die Reihenfolge der zurückgegebenen Schlüssel ist nicht garantiert und hängt vom verwendeten DBA-Treiber ab (z. B. GDBM, DBM, Berkeley DB). Verlasse dich nicht auf eine bestimmte Sortierung.
Parallelzugriff: Wenn während der Iteration mit dba_nextkey() gleichzeitig Schreiboperationen (Einfügen, Löschen) auf der Datenbank stattfinden, kann die Iteration unvollständig sein oder Schlüssel überspringen. Für konsistente Ergebnisse sollte die Datenbank im Lesemodus ('r') geöffnet oder ein Lock verwendet werden.
PHP 8.2+: Ab PHP 8.2 wird der Rückgabewert von dba_open() als Instanz der Klasse Dba\Connection zurückgegeben (zuvor war es eine resource).