|
|
 |
XXIV. Funciones de la Capa de Abstracción de Bases de Datos
(tipo-dbm)
Estas funciones forman la base para acceder a bases de datos tipo
Berkeley DB.
Esta es una capa general de abstracción para varias bases
de datos basadas en archivos. Como tal, su funcionalidad
está limitada al sub-conjunto común de
caracterÃsticas que soportan bases de datos modernas como
DB2 de Sleepycat
Software. (No confundirla con el software DB2 de IBM, el
cual es soportado por medio de las funciones ODBC.)
El comportamiento de varios aspectos depende de la
implementación de la base de datos interna. Funciones como
dba_optimize() y dba_sync()
harán lo que prometen para una base de datos y no
tendrán efecto sobre otras. Es necesario descargar e
instalar los gestores de base de datos soportados.
Tabla 1. Lista de gestores de DBA | Gestor | Notas |
|---|
| dbm |
Dbm es el tipo más antiguo (original) de bases de
datos tipo Berkeley DB. Es recomendable evitarlo, en lo
posible. No soportamos las funciones de compatibilidad
incorporadas en DB2 y gdbm, ya que solo son compatibles en el
nivel de código fuente, pero no pueden gestionar el
formato dbm original.
| | ndbm |
Ndbm es un tipo más reciente y flexible que dbm. Aun
tiene muchos de los lÃmites arbitrarios de dbm (y por
lo tanto es obsoleto).
| | gdbm |
Gdbm es el administrador de bases de
datos GNU.
| | db2 |
DB2 es el formato DB2 de
Sleepycat Software. Es descrito como "un grupo de
herramientas programáticas que ofrecen soporte
incorporado y de alto rendimiento de bases de datos tanto
para aplicaciones independientes como cliente/servidor".
| | db3 |
DB3 es DB3 de Sleepycat
Software.
| | db4 |
DB4 es DB4 de Sleepycat
Software. Este se encuentra disponible desde PHP
4.3.2.
| | cdb |
Cdb es "un paquete rápido, confiable y ligero para
crear y leer bases de datos constantes." Es del creador de
qmail y puede encontrarse en http://cr.yp.to/cdb.html. Ya que es constante,
sólo soportamos las operaciones de lectura. Y desde
PHP 4.3.0 soportamos escritura (no actualización) a
través de la biblioteca cdb interna.
| | cdb_make |
A partir de PHP 4.3.0 soportamos la creación (no
actualización) de archivos cdb cuando la biblioteca
cdb incorporada es usada.
| | flatfile |
Este formato está disponible desde PHP 4.3.0
únicamente para efectos de compatibilidad con la
extensión obsoleta dbm
y deberÃa evitarse. Sin embargo es posible usarlo
cuando los archivos fueron creados en este formato. Eso
ocurre cuando 'configure' no encuentra alguna biblioteca
externa.
| | inifile |
Este se encuentra disponible desde PHP 4.3.3 y tiene la
capacidad de modificar archivos php.ini desde scripts
PHP. Cuando se trabaja con archivos ini es posible pasar
matrices de la forma array(0=>grupo,1=>nombre_valor) o
cadenas de la forma "[grupo]nombre_valor" en donde el grupo
es opcional. Dado que las funciones
dba_firstkey() y
dba_nextkey() devuelven representaciones
tipo cadena de la clave, existe una nueva función,
dba_key_split(), disponible desde PHP 5
que permite convertir las claves tipo cadena en claves tipo
matriz sin perder FALSE.
| | qdbm |
Este se encuentra disponible desde PHP 5.0.0. La biblioteca
qdbm puede encontrarse en http://qdbm.sourceforge.net.
|
Cuando se invocan las funciones dba_open() o
dba_popen(), uno de los nombres de gestor debe
entregarse como argumento. La lista de gestores realmente
disponibles se muestra al invocarse phpinfo()
o dba_handlers().
Usando el conmutador de configuración --enable-dba=shared, es posible construir
un módule susceptible a ser cargado dinámicamente para
habilitar PHP con soporte básico de bases de datos tipo
dbm. También es necesario añadir soporte para al menos
uno de los siguientes gestores especificando el valor de
configuración --with-XXXX en su
lÃnea 'configure' de PHP.
| Aviso |
Después de configurar y compilar PHP es necesario ejecutar
la siguiente prueba desde la lÃnea de comandos: php
run-tests.php ext/dba. Ésta muestra si su
combinación de gestores funciona. Los más
problemáticos son dbm y
ndbm, que ocasionan conflictos con varias
instalaciones. La razón de esto es que en muchos sistemas
aquellas bibliotecas son parte de más de una biblioteca
externa. La prueba de configuración solo le previene de
configurar gestores sencillos que operen incorrectamente, pero no
de las combinaciones.
|
Tabla 2. Gestores DBA soportados | Gestor | Conmutador de Configuración |
|---|
| dbm |
Para habilitar el soporte dbm agregue --with-dbm[=DIR].
Nota:
dbm es usualmente una envoltura que con frecuencia resulta en
fallos. Esto quiere decir que únicamente
deberÃa usar dbm si está seguro de que funciona
y realmente necesita este formato.
| | ndbm |
Para habilitar soporte para ndbm agregue --with-ndbm[=DIR].
Nota:
ndbm es usualmente una envoltura que con frecuencia resulta
en fallos. Esto quiere decir que únicamente
deberÃa usar ndbm si está seguro de que
funciona y realmente necesita este formato.
| | gdbm |
Para habilitar el soporte para gdbm agregue --with-gdbm[=DIR].
| | db2 |
Para habilitar el soporte para db2 agregue --with-db2[=DIR].
Nota:
db2 genera un conflicto con db3 y db4.
| | db3 |
Para habilitar el soporte para db3 agregue --with-db3[=DIR].
Nota:
db3 genera un conflicto con db2 y db4.
| | db4 |
Para habilitar el soporte para db4 agregue --with-db4[=DIR].
Nota:
db4 genera un conflicto con db2 y db3.
Nota:
Esta opción fue agregada en PHP 4.3.2. En versiones
anteriores de PHP, es necesario usar --with-db3=DIR, en donde DIR es la
ruta hacia la biblioteca db4. No es posible usar versiones de
db desde 4.1 con versiones de PHP anteriores a
4.3.0. Asimismo, las bibliotecas db con versiones entre 4.1 a
4.1.24 no pueden ser usadas en ninguna versión de PHP.
| | cdb |
Para habilitar el soporte para cdb agregue --with-cdb[=DIR].
Nota:
Desde PHP 4.3.0 es posible omitir DIR para usar la biblioceta
cdb incorporada, acción que agrega el gestor cdb_make
para permitir la creación de archivos cdb y permite el
acceso a archivos cdb en la red usando secuencias de PHP.
| | flatfile |
Para habilitar el soporte para archivos planos (flatfile)
agregue --with-flatfile.
Nota:
Este gestor fue agregado en PHP 4.3.0 para ofrecer
compatibilidad con la extensión obsoleta dbm. Use este gestor
únicamente cuando no pueda instalar una de las
bibliotecas requeridas por los otros gestores y no pueda usar
el gestor cdb incorporado.
| | inifile |
Para habilitar el soporte para inifile agregue --with-inifile.
Nota:
Este gestor fue agregado en PHP 5.0.0 y le permite leer y
definir archivos tipo .ini de microsoft
(como el archivo php.ini).
| | qdbm |
Para habilitar el soporte para qdbm agregue --with-qdbm[=DIR].
Nota:
qdbm genera un conflicto con dbm y gdbm.
|
Nota:
Hasta PHP 4.3.0 es posible agregar tanto db2 como db3 pero solo
uno de ellos puede ser usado internamente. Esto quiere decir que
no es posible tener ambos formatos de archivo. A partir de PHP
5.0.0 existe un chequeo de configuración para evitar tales
errores de configuración.
Esta extensión no tiene directivas de
configuración en php.ini.
Las funciones dba_open() y
dba_popen() devuelven un gestor al archivo de
base de datos a acceder especificado, el cual es usado por todas
las otras llamadas a funciones dba.
Esta extensión no tiene ninguna
constante definida.
Ejemplo 1. Ejemplo de DBA |
<?php
$id = dba_open("/tmp/prueba.db", "n", "db2");
if (!$id) {
echo "dba_open ha fallado\n";
exit;
}
dba_replace("clave", "Este es un ejemplo!", $id);
if (dba_exists("clave", $id)) {
echo dba_fetch("clave", $id);
dba_delete("clave", $id);
}
dba_close($id);
?>
|
|
DBA es seguro con material binario y no tiene lÃmites
arbitrarios. Sin embargo, hereda todos los lÃmites
establecidos por la implementación de la base de datos
interna.
Todas las bases de datos basadas en archivo deben ofrecer una
forma de establecer el modo de archivo de una base de datos
recién creada, si es posible. Un modo de archivo es pasado
por lo general como el cuarto argumento a
dba_open() o dba_popen().
Es posible acceder a todas las entradas de una base de datos en
una forma lineal usando las funciones
dba_firstkey() y
dba_nextkey(). No debe modificar la base de
datos mientras la recorre.
Ejemplo 2. Recorrido de una base de datos |
<?php
$clave = dba_firstkey($id);
while ($clave != false) {
if (true) { $manejar_despues[] = $clave;
}
$clave = dba_nextkey($id);
}
foreach ($manejar_despues as $val) {
dba_delete($val, $id);
}
?>
|
|
add a note
User Contributed Notes
Funciones de la Capa de Abstracción de Bases de Datos
(tipo-dbm)
jason
21-Dec-2004 07:33
Don't make the dumb mistake I did, if you copy the first example at the top and modify it for test, the dba_open specifies "n" which will truncate the database that you are pointing to. Make sure you change it to "r" if you just want to read from an existing dbm file.
kevinphpdotnet at stormtide dot ca
17-Mar-2004 11:10
When using db4 on redhat 7.3 you may get signal 11s on the apache child processes. The installation test scripts will report that db4 is working correctly as the cli will not sig 11 out. The solution is to check to see if mod_rewrite is installed with apache, if it is either dereference it from libdb.so.3 or build apache without mod rewrite. Once this is done you will no longer have your child processes dying out and db4 will work. If you do not get a sig 11 after dba_open just ignore this comment.
djm at web dot us dot uu dot net
17-Oct-1999 03:28
With db2, you need to call dba_sync() to get the data written to disk; the examples are missing this. db2 uses
the BTREE file format, not the more common HASH.
BTREE is faster, though, in my tests, so it's a good
choice.
| |
| | Citas célebres | La mayoría de los seres humanos son como la piedra de imán, tienen un lado que repele y otro que atrae. Voltaire Filósofo y escritor francés (1694-1778) | | Citas en tu mail | | ©Contenidos Gratis |
| Chiste de... Varios | | Dejar el tabaco no es tan fácil | - He leído tantos libros sobre el vicio de los cigarrillos, que he decidido dejarlos.
- ¿Los cigarrillos?
- No, los libros | | Chistes en tu mail | | ©ContenidosGratis |
| Inicio | Acción | Estrategia | Palabras | Puzzles | Solitarios | Foro Trucos |  | Cake Mania Jugadores: 6835 Categoría del juego: Acción Objetivo del juego: Ayuda a Jill a recuperar la pastelería de su abuela llevando su propia pastelería; consigue clientes y gana dinero. |
|  | Rainbow Web Jugadores: 2199 Categoría del juego: Puzzles Objetivo del juego: Rompe un pegajoso hechizo y salva un reino de fantasía en Rainbow Web. Tendrás toneladas de diversión mientras juegas a este mágico desafío para la mente. |
|  | Mahjongg Fortuna Jugadores: 12462 Categoría del juego: Solitarios Objetivo del juego: Velocidad y habilidad mental son las armas más importantes en esta versión de un antiguo juego asiático. Despeja el tablero lo antes posible haciendo clic en las fichas iguales y gánate la fama eterna de la puntuación más alta. |
|  | Chainz 2 Jugadores: 6955 Categoría del juego: Puzzles Objetivo del juego: Entra en el mundo de las combinaciones con Chainz 2: Relinked, emocionante secuela del exitazo del año pasado, Chainz. Gira eslabones y crea combinaciones de 3 ó más. |
|  | Delicious Jugadores: 4405 Categoría del juego: Acción Objetivo del juego: ¿Eres un as de la multitarea? ¿Quieres que tus clientes estén contentos? ¡Pues Delicious es tu juego! Sacia el apetito de los clientes y tenlos contentos; ¡no te arriesgues! |
|  | Bookworm Jugadores: 4568 Categoría del juego: Palabras Objetivo del juego: Junta las letras para formar palabras. ¡Las palabras más largas valen más puntos! |
|  | Zuma Jugadores: 4976 Categoría del juego: Acción Objetivo del juego: Controla el ídolo de la rana de piedra de los antiguos Zuma en este intrigante enigma de acción. ¡Dispara bolas para formar conjuntos de tres, pero si dejas que lleguen a la calavera dorada morirás! |
|  | Jewel of Atlantis Jugadores: 3798 Categoría del juego: Puzzles Objetivo del juego: Descubre la ciudad hundida de la Atlántida y busca valiosos tesoros. Viaja más allá de las profundidades del mar y vive trepidantes aventuras en Jewel of Atlantis. |
|  | Jewel Quest Jugadores: 3727 Categoría del juego: Puzzles Objetivo del juego: Convierte la arena de la antigua selva en oro tan rápido como puedas juntando grupos de 3 elementos. ¡Los grupos más grandes valen más puntos! |
|  | Bejeweled 2 Jugadores: 3659 Categoría del juego: Puzzles Objetivo del juego: Con cuatro modos de juego únicos y fascinantes, nuevas piezas de juego explosivas e imponentes fondos planetarios, Bejeweled 2 es mucho más adictivo que nunca. |
|
|