XVII. Funciones de la capa de abstraccion de bases de datos (dbm-style)

Estas funciones son la base para el acceso a bases de datos del estilo Berkeley DB.

Este es un nivel de abstraccion general para varias bases de datos. Como tal su funcionalidad esta limitada a un grupo de modernas bases de datos como Sleepycat Software's DB2. (Esta no debe confundirse con IBM DB2 software, la cual es soportada mediante las funciones ODBC.)

El comportamiento de varios aspectos depende de la implementacion de la base de datos. Funciones como dba_optimize() y dba_sync() cumpliran su funcionalidad con unas bases de datos pero no con otras.

Los siguientes manejadores (handlers) estan soportados:

  • dbm es el mas antiguo (original) tipo de base de datos de la familia de Berkeley DB. Se debe evitar su uso, si es posible. Nosotros no soportamos las funciones de compatibilidad de DB2 y gdbm, porque ellas solo son compatibles a nivel de codigo fuente, pero no pueden manejar el formato original dbm.

  • ndbm es un tipo mas nuevo y mas flexible que dbm. Todavia tiene la mayoria de las limitaciones de dbm (Por lo tanto es descartado).

  • gdbm es el gestor de bases de datos de GNU (database manager).

  • db2 es Sleepycat Software's DB2. Es descrito como "un conjunto de herramientas de programacion que proveen acceso de alto nivel a bases de datos en aplicaciones standalone o en el modelo cliente/servidor. "

  • cdb es "una rapida, de confianza, sencilla herramienta para la creacion y lectura de bases de datos constantes." Fue creada por el autor de qmail y puede encontrarse en here. Como la base es constante solo se soportan las operaciones de lectura.

Ejemplo 1. Ejemplo de DBA

<?php

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

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

dba_replace("key", "This is an example!", $id);

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

dba_close($id);
?>

DBA es "binary safe" y no tiene ningun limite arbitrario. Hereda todas sus limitaciones de la implementacion de base de datos que tenga.

Todos las bases de datos basadas en ficheros deben proveer un mecanismo para establecer el modo a la hora de crear nuevas bases de datos, si ello es posible. Habitualmente este modo es pasado como el cuarto argumento en dba_open() o en dba_popen().

Se puede acceder a todas las entradas de una base de datos de modo secuencial (lineal) usando las funciones dba_firstkey() y dba_nextkey(). No se puede cambiar la base de datos mientras se recorre (traversing) por ella.

Ejemplo 2. Recorriendo una base de datos

<?php

# ...open database...

$key = dba_firstkey($id);

while($key != false) {
    if(...) { # remember the key to perform some action later
        $handle_later[] = $key;
    }
    $key = dba_nextkey($id);
}

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

?>

Tabla de contenidos
dba_close -- Cerrar uba base de datos
dba_delete -- Borra una entrada especificada por la clave key
dba_exists -- Comprueba si la clave key existe
dba_fetch -- Extrae los datos especificados por la clave key
dba_firstkey -- Conseguir la primera clave
dba_handlers -- List handlers available
dba_insert -- Insertar una entrada
dba_list -- List all open database files
dba_nextkey -- Extraer la siguiente clave
dba_open -- Abrir una base de datos
dba_optimize -- Optimiza la base de datos
dba_popen -- Apertura persistente de una base de datos
dba_replace -- Reemplaza o inserta una entrada
dba_sync -- Sincroniza la base de datos