Start · Sprachen · PHP · Referenz · dba_nextkey

dba_nextkey

Funktion

Liefert den nächsten Schlüssel einer DBA-Datenbank, nachdem zuvor <code>dba_firstkey()</code> aufgerufen wurde.

seit PHP 4.0.0 Kategorie: db

Signatur

dba_nextkey(Dba\Connection $dba): string|false

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

Typ
string|false
Beschreibung
Gibt den nächsten Schlüssel als 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);
name => Alice stadt => Berlin land => Deutschland

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).