Nov 032014
 
Artículo PHP

La distribución base del intérprete PHP incluye la extensión DBA (Database Abstraction Layer) para trabajar con bases de datos del tipo dbm, como es BerkeleyDB. La funcionalidad disponible en esta extensión no es tan completa como la que ofrecen las librerías específicas para cada tipo de base de datos, pero puede ser suficiente en un buen número de aplicaciones.

En este artículo se expone la manera de utilizar DBA en un script PHP, y las posibilidades que ofrece.

 1. Abrir la base de datos

En este artículo vamos a utilizar una base de datos de ejemplo “test.db”. Para hacer uso de la misma, comenzamos por abrirla con la sentencia:

$db = dba_open ( "test.db" , "r" , "db4" );
  • El primer argumento es el nombre del fichero que contiene la base de datos a abrir.
  • El segundo argumento indica el modo de acceso:
    • “r” – Abre la base de datos en modo sólo lectura
    • “w” – Abre la base de datos en lectura/escritura.
    • “c” – Crea la base de datos si no existe.  Abre la base de datos en lectura/escritura.
    • “n” – Crea la base de datos, eliminando su contenido si ya existía. Abre la base de datos en modo lectura/escritura
  • El tercer argumento indica el tipo de manejador de base de datos deseado (db4 para una base de datos BerkeleyDB).

Las bases de datos BerkeleyDB son creadas en modo BTree. Los modos Hash, Queue y otros no están soportados por la extensión DBA.

Para que funcione la llamada a dba_open, el intérprete PHP utilizado debe haber sido compilado incluyendo el manejador dba especificado.

La función db_handlers puede utilizarse para obtener una relación de los manejadores disponibles en el intérprete PHP:

echo "Manejadores DBA disponibles:\n";
$handlers = dba_handlers();
for ($i = 0; $i < count($handlers); $i++) {
    echo $handlers[$i] . "\n";
}

El intérprete PHP de nuestro sistema Debian wheezy ha sido instalado desde el repositorio de la distribución estándar, con el comando apt-get . Utilizando dicho intérprete, el código de arriba genera el siguiente resultado:

Manejadores DBA disponibles:
cdb
cdb_make
db4
inifile
flatfile
qdbm

Como vemos, en nuestro caso el intérprete incluye el manejador db4 requerido para abrir bases de datos Berkeley DB.

2. Leer el valor asociado a una entrada

Una base de datos Berkeley es básicamente una colección de pares (clave, valor) optimizada mediante la indexación de las claves.

Si la clave que nos interesa está en la variable $clave, podemos recuperar el valor correspondiente con una llamada a dba_fetch():

$valor = dba_fetch($clave,$db);

3. Insertar una nueva entrada, actualizar y eliminar una entrada

La función dba_insert() permite insertar una nueva entrada en la base de datos, especificando la clave y el valor de la misma:

dba_insert($clave,$valor,$db);

Esta función devuelve true si la entrada se inserta con éxito, y false si se ha producido un error, como por ejemplo si la clave ya existía en la base de datos.

Para actualizar el valor de una entrada, se utiliza la función dba_replace():

dba_replace($clave,valor,$db);

Nota: Si la clave pasada como argumento no existía previamente, dba_replace() inserta una nueva entrada.

Por último, se puede eliminar una entrada de la base de datos con la función dba_delete:

dba_delete($clave,$db);

En este caso, sólo es necesario pasar como argumento la clave de la entrada a eliminar (y naturalmente, el manejador de la base de datos).

4. Determinar si una clave existe

La función dba_exists() devuelve true si la clave que se le pasa como argumento ya existe en la base de datos:

if (dba_exists($clave,$db)) echo "La clave " . $clave . " existe!\n";

5. Recorrer el contenido de la base de datos

Para recorrer linealmente todo el contenido de la base de datos, se recupera la primera clave con la funcion dba_firstkey(), y a continuación se recuperan las demás claves en un bucle que incluye una llamada a dba_nextkey(), hasta que ésta función devuelve un valor false. Para cada clave, podemos recuperar su valor asociado con una llamada a dba_fetch();

$clave = dba_firstkey($db);
while ($clave != false) {
    echo "Clave: " . $clave . ", valor: " . dba_fetch($clave,$db) . "\n";
    $clave = dba_nextkey($db);
}

Referencias

Indice de artículos sobre programación en PHP

 Publicado por en 3:40 pm

 Deja un comentario

(requerido)

(requerido)