Interfaces de bases de datos

Como ya hemos comentado anteriormente, PHP admite bibliotecas para conectar con gran cantidad de bases de datos: Oracle, SQL Server, PostgreSQL, etcétera. Por regla general la conexión y consultas en todas las BBDD son similares a las utilizadas por MySQL. Pero, ¿qué pasaría si tenemos nuestro proyecto realizado usando la librería MySQLI y lo tuviéramos que migrar a Oracle? Nos tocaría ir fichero a fichero para cambiar las conexiones, las consultas, recorridos, etcétera.

Desde PHP 4 han ido apareciendo diferentes interfaces de acceso a bases de datos con el objetivo de independizar el código PHP que accede a la base de datos. Para ello se suele colocar una capa de abstracción de datos entre PHP y el servidor de base de datos, por ejemplo:

En la siguiente figura queda más claro donde se colocaría la capa de acceso de abstracción o capa de acceso a datos.

Esquema de acceso a una capa de abstracción de datos

**Veamos un ejemplo de consulta con PEAR::DB**

<?php
//requerimos la clase DB.php de la libreria PEAR
require_once('DB.php');
$user = 'comprador';
$pass = 'proweb2013';
$host = 'localhost';
$db_name = 'uazon';

//dsn ! Data Source Name (nombre de la fuente de datos)
$dsn = "mysqli://$user:$pass@$host/$db_name";

$db = DB::connect($dsn);

if (DB::isError($db)) {
   //mostrar error y salir
}
$query = "select * from libros";

$result = $db->query($query);

for ($i=0; $i < $num_results; $i++) {
   $libro = $result->fetchRow(DB_FETCHMODE_ASSOC);
...

Como vemos en el ejemplo anterior, con la interfaz **PEAR::DB** disponemos de funciones parecidas a las vistas anteriormente. Configuramos el _data source_ (dsn, data source name) especificando el controlador (en nuestro caso mysqli) y a partir de ahí utilizaremos funciones propias de dicha interfaz. Lo interesante de usar este tipo de interfaces es la portabilidad, es decir, si migramos nuestra aplicación a un servidor de base de datos como ORACLE o PostgreSQL tan sólo tendremos que cambiar la cadena de conexión a la fuente de datos y toda la aplicación funcionará de la misma forma.

Desde la versión 5.1 podemos usar PDO, que es la interfaz de conexión que usan prácticamente todos los ORM's (Object-Relational Mapping - mapeo objeto relacional) actuales: Doctrine, Propel, etcétera.

results matching ""

    No results matching ""