1.4.3. Secuencias

PEAR::DB incorpora un mecanismo propio de secuencias (AUTO_INCREMENT en MySQL), que es independiente de la base de datos utilizada y que puede ser de gran utilidad en identificadores, claves primarias, etc. El único requisito es que se usen sus métodos de trabajo con secuencias, siempre que se esté trabajando con esa base de datos; es decir, no se debe crear la secuencia en el SGBD y, después, trabajar con ella con los métodos que ofrece PEAR::DB. Si la secuencia la creamos mediante la base de datos, entonces deberemos trabajar con ella con las funciones extendidas de SQL que nos proporcione ese SGBD (en PostgreSQL la función nextval() o en MySQL la inserción del valor 0 en un campo AUTO_INCREMENT).

Disponemos de las siguientes funciones para trabajar con secuencias:

•    createSequence($nombre_de_secuencia): crea la secuencia o devuelve un objeto DB_Error en caso contrario.

•    nextId($nombre_de_secuencia):  devuelve  el  siguiente  identificador de la secuencia.

•    dropSequence($nombre_de_secuencia): borra la secuencia.

// Creamos la secuencia:
$tmp = $db->createSequence(`miSecuencia´);
if (DB::isError($tmp)) {
die($tmp->getMessage());
}
// Obtenemos el siguiente identificador
$id = $db->nextId(`mySequence´);
if (DB::isError($id)) {
die($id->getMessage());
}
// Usamos el identificador en una sentencia
$res =& $db->query("INSERT INTO miTabla (id, texto) VALUES ($id, `Hola´)");
// Borramos la secuencia
$tmp = $db->dropSequence(`mySequence´);
if (DB::isError($tmp)) {
die($tmp->getMessage());
}

 

Finalmente,  en  el  aspecto  relacionado  con  los  metadatos  de  las  tablas, PEAR::DB ofrece la función tableInfo(), que proporciona información detallada sobre una tabla o sobre las columnas de una hoja de resultados obtenida de una consulta.

$info = $db->tableInfo(`nombretabla´);
print_r($info);

O bien:

$res =& $db->query(`SELECT * FROM nombretabla´);
$info = $db->tableInfo($res);
print_r($info);

El resultado será similar al siguiente:

[0] => Array (
  [table] => nombretabla
  [name] => nombre
       [type] => string
       [len] => 255
       [flags] =>
     )
     [1] => Array (
       [table] => nombretabla
       [name] => nif
       [type] => string
       [len] => 20
       [flags] => primary key not null
    )
Funcionalidades
Hay funcionalidades más avan- zadas de esta librería que aumentan continuamente. De todas formas, con las presentadas basta para identificar las ventajas de trabajar con una capa de abstracción del motor de base de datos donde se al- macenan los datos de nuestra aplicación.