martes, noviembre 29, 2011

PHP y Microsoft Access

PHP y Microsoft Access


No soy un fan de la base de datos MS Access, pero cuando en una oficina pequeña hay alguna aplicación legacy hecha en MS Access y se desea que esta sea consultada en una pequeña aplicación Web interna, es fácil usar PHP y ODBC para tal fin.

PHP no soporta de manera nativa el acceso a MS Access, pero si soporta ODBC.

ODBC (Open DataBase Connectivity) es un estándar de acceso a bases de datos que tiene como objetivo permitir acceder a cualquier base de datos desde cualquier aplicación, sin importar qué sistema de gestión de bases de datos está implementada.

Entonces desde PHP se puede acceder a cualquier base de datos soportada por ODBC sin importar que exista un driver nativo para PHP. Aunque OJO: es importante aclarar que si ya existe un driver nativo de PHP para alguna base de datos es mejor usarlo en lugar de usar ODBC.

Para acceder a la base de datos por ODBC desde PHP es posible utilizar un conjunto de funciones como odbc_connect que se puede ver en más detalle en la documentación de PHP:

http://www.php.net/manual/en/function.odbc-connect.php

En este ejemplo, se ha instalado en el equipo MS Windows que contiene la base de datos MS Access, un servidor AppServ (http://www.appservnetwork.com) el cual en un sólo instalador y con un par de clics instala Apache, MySQL y PHP sobre MS Windows.

Luego para acceder a la base de datos de MS Access, primero se creará un Origen de Datos (aka DSN) llamado bd1 desde el Panel de Control de MS Windows, a como se muestra a continuación:


Agregar nuevo DSN de sistema.


Seleccionar el driver MS Access.


Pulsar el botón Seleccionar Base de datos y especificar la ruta a la base de datos.


Finalmente se pueden usar las funciones odbc_connect, odbc_exec, odbc_fetch_array, odbc_close para tener acceso a la base de datos, a continuación un ejemplo simple:

echo "Ejemplo sencillo conexión con acess";


$enlace = odbc_connect('bd1', '', '');

if (!$enlace) {

  print "Error al intentar conectar con BD.";

  exit();

}


$sql = "SELECT * FROM nombre";

$resultado = odbc_exec($enlace,$sql);


while($fila = odbc_fetch_array($resultado)){

echo "Id: {$fila['id']}";

echo "Nombre: {$fila['nombre']}";

}


odbc_close($enlace);

Al ejecutarlo, si todo sale bien se podrá ver algo similar a esto:


El código de ejemplo y la base de datos se puede descargar de aquí.