XVII. DBA

Ces fonctions sont l'interface avec les bases de type Berkeley.

C'est une couche générale pour plusieurs bases de données sur fichiers. En tant que tel, les fonctionnalités sont limitées à une partie des fonctionnalités des bases de données modernes, comme Sleepycat Software's DB2 (A ne pas confondre avec IBM's DB2 software, qui fonctionne avec ODBC).

Le comportement de certaines fonctions dépends de la base de données utilisée. Par exemple dba_optimize() et dba_sync() n'auront pas le même effet d'une base à l'autre.

Lors de l'utilisation de la fonction dba_open() ou de dba_popen(), une des librairies suivante doit être fournie comme argument. La liste complète des librairies supportées par votre configuration est disponible avec la fonction phpinfo(). (Pour ajouter le support de l'une de ces librairies, ajouter l'option de configuration --with-XXXX).

Tableau 1. Liste des librairies DBA

LibrairieNotes
dbm Dbm est la plus ancienne des base de données de type Berkeley. Il vaut mieux l'éviter si possible. Les fonctions de compatibilités codées dans DB2 et gdbm ne sont pas supportées, car elles ne sont compatibles qu'au niveau du code source, et ne peuvent pas gérer le format dbm originel. ( --with-dbm).
ndbm ndbm est un nouveau type de dbm plus flexible. Il a cependant la majorité des limitations du genre. ( --with-ndbm).
gdbm gdbm est la base dbm GNU. ( --with-gdbm).
db2 db2 est DB2 de Sleepycat Software. Elle se décrit comme un "ensemble d'outils qui fournissent une base de données performante, tant pour les applications indépendantes que pour le client/serveur". ( --with-db2).
db3 DB3 est le DB3 de Sleepycat Software. ( --with-db3).
cdb cdb est "un package rapide, robuste, léger, pour créer et lire des bases de données constantes". C'est l'auteur de qmail qui l'a écrit, et elle est disponible ici. Puisque c'est une base constante, elle ne supporte que la lecture. (--with-cdb).

Exemple 1. Exemple DBA

<?php
$id = dba_open("/tmp/test.db", "n", "db2");
if(!$id) {
    echo "dba_open a échoué\n";
    exit;
}
dba_replace("key", "Ceci est un exemple!", $id);
if(dba_exists("key", $id)) {
    echo dba_fetch("key", $id);
    dba_delete("key", $id);
}
dba_close($id);
?>

DBA gère les données binaires, et n'a pas de limites arbitraires. Elle hérite de toutes les limites de la base sous-jacentes.

Toutes les bases de données sur fichiers doivent fournir un moyen de changer le mode d'accès au fichier d'une base, et si possible, de toutes les bases. Le mode d'accès est généralement passé en 4ème argument à dba_open() ou dba_popen().

Vous pouvez accéder à toutes les entrées d'une base d'une manière linéaire, avec les fonctions dba_firstkey() et dba_nextkey(). Vous ne devez pas modifier une base lorsque vous la traversez ainsi.

Exemple 2. Passer en revue une base

<?php
// ...ouverture de la base...
$key = dba_firstkey($id);
while($key != FALSE) {
    if(...) { 
// conserver la clé pour faire d'autres opérations plus tard
        $handle_later[] = $key;
    }
    $key = dba_nextkey($id);
}
for($i = 0; $i < count($handle_later); $i++)
    dba_delete($handle_later[$i], $id);
?>

Table des matières
dba_close -- Ferme une base.
dba_delete -- Efface une entrée.
dba_exists -- Vérifie qu'une clé existe.
dba_fetch -- Lit les données liées à une clé.
dba_firstkey -- Lit la première clé.
dba_handlers -- List handlers available
dba_insert -- Insère une entrée.
dba_list -- List all open database files
dba_nextkey -- Lit la clé suivante.
dba_open -- Ouvre une base de données.
dba_optimize -- Optimise une base.
dba_popen -- Ouvre une connexion persistante à une base de données.
dba_replace -- Remplace ou insère une entrée.
dba_sync -- Synchronise une base de données.