PHP + ADOdb Abstracción de acceso a la base de datos

Es muy frecuente encontrar la combinación PHP+MySQL en gran cantidad de sitios web debido a la poularidad del paquete LAMP o WAMP (Linux|Windows+Apache+MySQL+PHP).

Estos paquetes incluyen la librería PHP-MySQL por defecto y las instrucciones de PHP para el acceso a MySQL son muy sencillas.
El problema viene cuando hemos programado las aplicaciones PHP para consultar a una base de datos MySQL exclusivamente y queremos cambiar de servidor de base de datos a otro como Posgres u Oracle.
No sólo las funciones son diferentes sino que incluso la sintaxis SQL de las consultas puede variar de manera que nos veríamos obligados a reescribir mucho código.
Para evitar este problema se puede implementar una capa de abstracción de acceso a la base de datos, es decir, el mismo conjunto de instrucciones se puede utilizar en cualquier servidor de base de datos sin tener que cambiar apenas código.

Las dos alternativas más populares son ADOdb y MDB2.

Yo he elegido ADOdb porque MDB2 necesita tener PEAR instalado además de tener que instalar otra librería llamada MDB2_Driver_mysql. En cambio, ADOdb no necesita nada más que copiar la carpeta con los archivos para poder trabajar.

A continuación un manual rápido de ADOdb.

Conexión con la base de datos:

$dsn = engine://user:password@host/database;
$this->db = NewADOConnection($dsn);
if (!$db) die(‘Connection failed’);
$db->debug = true; //poner a false para no ver mensajes

Insert de una fila:

$stmt = $db->Prepare(‘INSERT alumnos (nombre, edad) VALUES (?, ?)’);
$args = array(‘manolo’, ’13’);
$rs = $db->Execute($stmt, $args);
if ($rs === false) die($db->ErrorMsg());

Select de una columna:

$stmt = $db->Prepare(‘SELECT DISTINCT nombre FROM alumnos WHERE edad=?’);
$args = array(’12’);
$rs = $db->GetCol($stmt, $args);
//GetCol devuelve un array unidimensional
if ($rs === false) die($db->ErrorMsg());
$num = count($rs); //numero de elementos
foreach ($rs as $result){
echo $result.”n”;
}

Select de varios columnas:

$stmt = $db->Prepare(‘SELECT * FROM alumnos’);
$rs = $db->GetAll($stmt);
//GetAll devuelve un array bidimensional
if ($rs === false) die($db->ErrorMsg());
$num = count($rs);
print_r($rs);

Update de varias filas:

$stmt = $db->Prepare(‘UPDATE alumnos SET edad=? WHERE nombre=?’);
$args = array(’15’, ‘manolo’);
$rs = $db->Execute($stmt);
//GetAll devuelve un array bidimensional
if ($rs === false) die($db->ErrorMsg());
$num = $db->Affected_Rows(); //filas modificadas
Sin categoría

Deja una respuesta