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);
?> |
|