PHP Handbuch
Zurück |  | Nach vorne

# XVII. dba Datenbank (dbm-style) Abstraktions-Funktionen

Diese Funktionen bilden die Basis für den Zugriff auf Datenbanken vom Typ "Berkeley DB".

"dba" implementiert eine generelle Abstraktionsschicht für verschiedene dateibasierte Datenbanken. Der Funktionsumfang ist daher beschränkt auf eine gemeinsame Teilmenge des Funktionsumfangs aktueller Datenbanken (zum Beispiel Sleepycat Software's DB2, nicht zu verwechseln mit IBM's DB2 Software, die über die ODBC Funktionen unterstützt wird).

Das Verhalten der dba-Funktionen ist teilweise abhängig von der Implementation des zugrundeliegenden Datenbanksystems. Funktionen wie zum Beispiel dba_optimize() und dba_sync() funktionieren vielleicht bei einer Datenbank, und tun gar nichts bei einer Anderen.

Beim Aufruf von dba_open() oder dba_popen() muss einer der verfügbaren Handler-Namen aus der nachfolgenden Handler-Tabelle angegeben werden. Die tatsächlich verfügbaren Handler in Ihrer PHP-Installation können Sie mit der Funktion phpinfo() anzeigen lassen. (Um zum Zeitpunkt der PHP-Generierung die Unterstützung für einen der folgenden Handler verfügbar zu machen, fügen Sie bitte den jeweils angegebenen `--with-XXXX` Compilerschalter in ihren PHP-Konfigurations-Aufruf ein.)

Tabelle 1. Liste der DBA-Handler

Handler | Hinweise
--- | ---
`dbm` | Dbm ist der ursprüngliche und älteste Typ der "Berkeley DB" Datenbanken. Sie sollten diesen Typ wenn möglich vermeiden. Die in DB2 und gdbm enthaltenen dbm-Kompatibilitätsfunktionen werden ebenfalls nicht unterstützt, da sie nur auf Quellcode-Basis kompatibel sind, aber Dateien im originalen dbm-Format nicht bearbeiten können. (`--with-dbm`)
`ndbm` | Ndbm ist neuer und flexibler als Dbm. Es hat jedoch die meisten Einschränkungen von Dbm übernommen und ist daher ebenfalls nicht empfehlenswert. (`--with-ndbm`)
`gdbm` | Gdbm ist der GNU Datenbank Manager. (`--with-gdbm`)
`db2` | DB2 ist Sleepycat Software's DB2. Es wird beschrieben als "Werkzeugsatz für eingebaute Unterstützung von Hochleistungs-Datenbanken für Standalone- und Client/Server- Applikationen". (`--with-db2`)
`db3` | DB3 ist Sleepycat Software's DB3. (`--with-db3`)
`cdb` | Cdb ist "ein schnelles, zuverlässiges und kompaktes Paket zum Erstellen und Auslesen konstanter Datenbanken." Es stammt vom Autor von qmail und kann hier heruntergeladen werden. Da es für konstante Daten ausgelegt ist, werden nur Lese-Operationen unterstützt. (`--with-cdb`)

Beispiel 1. DBA Beispiel
    <?php

    $id = dba_open ("/tmp/test.db", "n", "db2");

    if (!$id) {
        echo "dba_open schlug fehl\n";
        exit;
    }

    dba_replace ("key", "Dies ist ein Beispiel!", $id);

    if (dba_exists ("key", $id)) {
        echo dba_fetch ("key", $id);
        dba_delete ("key", $id);
    }

    dba_close ($id);
    ?>

DBA arbeitet binärsicher und besitzt keine willkürlichen Limits. Es erbt allerdings alle Einschränkungen von der zugrundeliegenden Datenbank-Implementation.

Alle dateibasierten Datenbanken müssen einen Weg zur Verfügung stellen, um den Dateimodus einer neu erstellten Datenbank zu bestimmen, soweit dies überhaupt möglich ist. Der Dateimodus wird gewöhnlich als viertes Argument an die Funktionen dba_open() oder dba_popen() übergeben.

Sie können auf alle Einträge in einer Datenbank sequentiell durch die Verwendung von dba_firstkey() und dba_nextkey() zugreifen. Während die Datenbank so durchlaufen wird, darf sie nicht verändert werden.

Beispiel 2. Durchlaufen einer Datenbank
    <?php

    # ...Oeffnen der Datenbank...

    $key = dba_firstkey ($id);

    while ($key != false) {
        if (...) { # den Schluessel fuer spaetere Aktionen merken
            $handle_later[] = $key;
        }
        $key = dba_nextkey ($id);
    }

    for ($i = 0; $i < count($handle_later); $i++)
        dba_delete ($handle_later[$i], $id);

    ?>

Zurück | Zum Anfang | Nach vorne
ctype_xdigit | Nach oben | dba_close