Ejemplo de conexión con base de datos Access en PHP

  • Por
  • PHP
Un pequeño ejemplo para mostrar el modo de conectar de una base de datos Access con PHP por medio de ODBC.
PHP dispone de diversos juegos de funciones para conectar con distintos tipos de bases de datos. Por ejemplo, existe un juego de funciones específico para MySQL, otro para Oracle, PostgreSQL, etc. Aunque no existe entre sus librerías ninguna función para acceder específicamente a una base de datos Access. Para ello, disponemos de las funciones de conexión ODBC con bases de datos.

ODBC es un estándar de conexión con bases de datos que utilizan los sistemas Windows. Con ODBC se puede acceder a cualquier base de datos, siempre que exista el correspondiente driver ODBC para esa base de datos. Las conexiones ODBC son propias de sistemas Microsoft, por lo que podremos utilizarlas desde cualquier lenguaje de programación en Windows, como PHP, para acceder a cualquier base de datos, incluida Access.

Lo primero que tendremos que hacer para conectar con PHP es crear un DSN en nuestro ordenador. Un DSN es un nombre de conexión que utilizaremos para referenciar a una base de datos. Podemos tener tantos DSN en nuestro sistema como necesitemos, para acceder desde aplicaciones o lenguajes de programación a bases de datos por ODBC. Esto lo hacemos desde el panel de control de Windows en la opción "Herramientas administrativas - Origenes de datos ODBC". Tenemos que crear un DNS de sistema o de usuario, en la solapa correspondiente y luego apretando agregar. Habrá que seleccionar el driver ODBC que tenemos que utilizar, como se trata de una base de datos de Access, debemos seleccionar el driver ODBC de Access. Luego habrá que darle un nombre al DSN y seleccionar el archivo .mdb que contiene nuestra base de datos. Una vez realizado esto, necesitaremos acordarnos del nombre del DSN que hemos creado, porque lo tendremos que utilizar en nuestro código de conexión.

Referencia: Se explica como crear un DSN con más detalle en el artículo Pasos previos II: Conexión a BD. Es un capítulo del manual de ASP, pero se hace igual para conectar Access con PHP.

Si tenemos nuestra página alojada en un proveedor de hosting y queremos conectar Access con PHP, si es que lo permiten (pues lo típico en esos casos es utilizar una base de datos MySQL), tendríamos que preguntarles cómo crear el DSN en sus sistemas.

Una vez tengamos el DSN utilizaremos un código de conexión como este:

$conn_access = odbc_connect ("guiarte_access", "", "");

Con la función odbc_connect() se conecta con una base de datos por ODBC, indicando el nombre del DSN en el primer parámetro y luego el usuario y la contraseña. En Access normal es que no se tenga siquiera usuario y contraseña, por lo que esos dos parámetros los he pasado con una cadena vacía. Nos devuelve el identificador de la conexión con la base de datos.

Para ejecutar una sentencia SQL utilizaremos la función odbc_exec(). De este modo:

$rs_access = odbc_exec ($conn_access, "select * from tabla");

Como se puede ver, odbc_exec() recibe el identificador de la conexión obtenido anteriormente y la sentencia SQL a ejecutar. Devuelve un identificador del conjunto de registros resultado de ejecutar la sentencia.

Luego utilizaremos funciones como odbc_fetch_array() o odbc_fetch_object() para acceder a cada uno de los registros obtenidos en el conjunto de resultados.

Un código completo de conexión con una base de datos Access podría ser el siguiente:

if ($conn_access = odbc_connect ( "guiarte_access", "", "")){
    echo "Conectado correctamente";
    $ssql = "select * from libros";
    if($rs_access = odbc_exec ($conn_access, $ssql)){
       echo "La sentencia se ejecutó correctamente";
       while ($fila = odbc_fetch_object($rs_access)){
          echo "<br>" . $fila->titulo;
       }
    }else{
       echo "Error al ejecutar la sentencia SQL";
    }
} else{
    echo "Error en la conexión con la base de datos";
}

Nota: Las funciones odbc_fetch_array() y odbc_fetch_object(), así como otras funciones de PHP para el acceso por ODBC a bases de datos, son idénticas o muy similares en su utilización a las funciones propias para otras bases de datos como MySQL. En nuestros manuales y talleres de PHP tenemos muchos ejemplos de conexión y trabajo con bases de datos MySQL, que nos pueden servir de guía para aprender a trabajar con bases de datos Access. Simplemente habría que tener el DSN para la conexión con la base de datos Access y cambiar los nombres de las funciones como mysql_fetch_array() por sus correspondientes, como odbc_fetch_array().

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

xavi barberan

03/10/2009
Enviar datos a una web con access
Realmente muy interesante.
EL ejemplo y la explicación fenomenal.
Muchas gracias.

nestor raul

30/11/2009
por fa ayendenme
tengo el siguiente codigo pero no envia datos a la base en phpmyadmin

gracias
<HTML>
<HEAD>
<TITLE>Insertar.html</TITLE>
</HEAD>
<BODY>
<form method="post" action="raye.php">
<div align="center">
<h1>Insertar un registro</h1>
<br>
<FORM METHOD="POST" ACTION="raye.php">
Nombre<br>
<INPUT TYPE="TEXT" NAME="nombre"><br>
Teléfono<br>
<INPUT TYPE="TEXT" NAME="apellido"><br>
<INPUT TYPE="SUBMIT" value="Insertar">
</FORM>
</div>
<?
//Conexion con la base
mysql_connect("localhost","root","");
$opt = $_GET["opt"];
$nombre = $_GET["nombre"];
$apellido= $_GET["apellido"];
//selección de la base de datos con la que vamos a trabajar
mysql_select_db("prueba");

//Ejecucion de la sentencia SQL
mysql_query("insert into `clientes` (nombre,apellido) values ('$nombre','$apellido')");
?>
<h1><div align="center">Registro Insertado</div></h1>
<div align="center"><a href="consulta.php">Visualizar el contenido de la base</a></div>
</BODY>
</HTML>

rafa

18/3/2010
gracias
a no manches me sirvio un buen quede sorprendido, gracias

Hernán

22/7/2010
Update en tabla Access mediante PHP
Hola, desde ya quiero agradecerte el aporte que has comentado, el de la coneccion de una base en access mediante PHP, lo he realizado exitosamente.
El siguiente paso que nesesito lograr es el de poder realizar un update de una de dichas tablas en mi base de acces, te lo agradeceria en verdad, pues este dileme surgio en mi trabajo y me urge solucionarlo.
Muchisimas gracias desde ya. Saludos!

08/5/2011
ASUNTO IMPORTANTE DE SINTAXIS SQL EN PHP
Hola, estoy comenzando a trabajar con bases de datos access en php,ya me logro conectar a la base pero algo que me ha quebrado la cabeza por mas de 2 meses es PORQUE las sentencias sql por ODBC no aceptan la cláusula "where" de ningún modo
$numcuenta=$_GET['numcuenta'];
echo $numcuenta;
$conn_access=odbc_connect("vanco","admin","acces")or die ("error EN LA CONEXION");
$ssql="select * from estadodecuenta ";
$ssql.="where ncta='$numcuenta' ";
$ejecutar= odbc_exec ($conn_access, $ssql)or die ("error en la sentencia");

el error que me manda dice
Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][Controlador ODBC Microsoft Access] Pocos parámetros. Se esperaba 1., SQL state 07001?O
pero si omito mi condición where, me muestra todo sin problemas
espero alguien pueda ayudarme
saludos

Elier

23/6/2012
Coonsultas con sentencia like
Bueno, aunque ha pasado algo de tiempo respecto a tu pregunta, he hecho algunas pruebas y finalmente encontré solucion a tu problema.
Con esta sentencia puedes resolver tu problema.
$nom = "Eli";
$sql = "select * from cursistas where nombre_apellidos like '%".$nom."%'";
$rs = odbc_exec($db, $sql) or die ("No se pudo realizar la consulta");
while($row = odbc_fetch_object($rs))
{
//echo $row["nombre_apellidos"];
echo $row -> nombre_apellidos;
echo "<br>";
}

jah87

23/6/2012
Coonsultas con sentencia like
Bueno, aunque ha pasado algo de tiempo respecto a tu pregunta, he hecho algunas pruebas y finalmente encontré solucion a tu problema.
Con esta sentencia puedes resolver tu problema.
$nom = "Eli";
$sql = "select * from cursistas where nombre_apellidos like '%".$nom."%'";
$rs = odbc_exec($db, $sql) or die ("No se pudo realizar la consulta");
while($row = odbc_fetch_object($rs))
{
//echo $row["nombre_apellidos"];
echo $row -> nombre_apellidos;
echo "<br>";
}

gino herrera

04/3/2013
agregar registro a la base de datos
hola estoy creando una aplicación web con 82 campos quisiera saver si me pueden ayudar con el codigo para guardar la informacion de los registros en la base de datos que ya tengo creada en access 2010 ya he creado el DSN pero me esta dando problema el codigo php para guardar los datos
De Antemano Muchas Gracias me han servido mucho sus publicaciones

MARIO ALBERTO

17/5/2013
queja
esta pagina no me sirve de nada, .l.

oscar

16/8/2014
nombre de campos
el nombre del campo en access tiene espacios por lo que en PHP me marca error cuando quiero leer el valor de dicho campo.

ejemplo correcto: echo $dato-> titulo;
error: echo $dato->el titulo

que puedo hacer??

JUANJAVA

29/2/2016
no me funciona ni con mdb ni con accdb
buena tarde y muchas gracias por la atencion que nos prestas, solo te comento lo siguiente
al correrlo me salen los siguientes errores:
(estoy windows 8.1 64 bits wampserver 2.5 )
( ! ) Warning: odbc_connect(): in C:wampwwwspaodbc.php on line 7
Call Stack
# Time Memory Function Location
1 0.0003 246104 {main}( ) ..odbc.php:0
2 0.0003 246672 odbc_connect ( ) ..odbc.php:7
Ya ocurrido un error tratando de conectarse con el origen de datos.1
( ! ) Warning: odbc_exec() expects parameter 1 to be resource, boolean given in C:wampwwwspaodbc.php on line 19
Call Stack
# Time Memory Function Location
1 0.0003 246104 {main}( ) ..odbc.php:0
2 0.0026 247424 odbc_exec ( ) ..odbc.php:19
Error en odbc_exec

y el codigo igual que lo mandaste fue
<?php
$dsn="prueba";
//debe ser de sistema no de usuario
$usuario="";
$clave="";
//realizamos la conexion mediante odbc
$cid=odbc_connect($dsn, $usuario, $clave);

if (!$cid) {
echo ("<strong>Ya ocurrido un error tratando de conectarse con el origen de datos.</strong>");
}

echo 1;

// consulta SQL a nuestra tabla "usuarios" que se encuentra en la base de datos "db.mdb"
$sql="Select * from usuarios";

// generamos la tabla mediante odbc_result_all(); utilizando borde 1
$result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec"));
print odbc_result_all($result,"border=1");
?>
muchas gracias por la ayuda