PHP bases de datos mediante ODBC: Osvaldo Cantone Breve resumen sobre el manejo de bases de datos no MySQL en PHP. La información presentada se obtuvo del manual online de php.net y de las ayudas de los distintos menúes de configuración de los orígenes ODBC. En forma muy resumida, podemos decir que 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, etc. Aunque no existe entre sus bibliotecas de funciones ningún conjunto para acceder específicamente a una base de datos Access, se dispone para ello de las funciones de conexión ODBC con bases de datos. Para enlazar datos entre una aplicación PHP y algunos tipos de bases de datos, por ejemplo Microsoft Access, existe la tecnología Open Data Base Connectivity (Conectividad Abierta de Bases de Datos) que permite operar con drivers que “traducen” los distintos formatos para hacer accesibles los datos de los distintos tipos de bases a las aplicaciones que los requieran. Supongamos que se desea usar en una página PHP datos almacenados en una tabla de una base Microsoft Access. Crearemos una conexión con esa base (la variable $conexión del ejemplo) mediante la función odbc_connect() y luego usaremos las funcones que permiten ejecutar una consulta SQL mediante esa conexión, en este caso odbc_do(). <?php $conexion= odbc_connect("miDSN", "", ""); $query = "SELECT * FROM Contactos"; $resultado = odbc_do($conexion, $query); … … ?> Función odbc_connect(): Devuelve un objeto conexión con una base de datos y recibe como parámetros: Un origen de datos: Este puede ser un origen de datos DSN de sistema o de usuario. A continuación se datalla como operar con los origenes de datos DSN. Un usuario de la base da datos: El nombre de ususario si se ha establecido usuario y password para acceder a la base. Una password de la base de datos:La password si se ha establecido usuario y password para acceder a la base. Origenes de datos DSN de sistema, usuario y archivo Cuando se instala Microsoft Office, se instala en el panel de control un icono ODBC que representa el Administrador de Orígenes de datos ODBC. El Administrador de ODBC permite instalar y configurar orígenes de datos ODBC de alguno de los siguientes tres tipos de DSN: DSN de usuario DSN de sistema DSN de archivo Paso a paso para crear Origenes ODBC para Micrsoft Access: En este ejemplo paso por paso se muestra como crear un origen de datos DSN de sistema. Adecuado tano para trabajar con el Server Apache y bases Access, por ejemplo como para el entorno Microsoft IIS (Internet Information Server). A continuación se detallan las diferencias entre los tipos de DSN. En el panel de control de Windows seleccionamos Herramientas Administrativas. Y luego el Administrador de Origenes de Datos ODBC (Open Data Base Connectivity) Luego la solapa DSN de sistema o DSN de Usuario (en este ejemplo usaremos de sistema. Clickeamos en agregar y seleccionamos el Driver Microsoft Access(*.mdb) NOTA: En Windows 7 puede que aparezca un error al no tener por defecto una ruta correcta. Eso se corrige con los siguientes pasos indicados en el apunte Origenes ODBC en Windows 7 Donde podemos configurar la nueva conexión DSN: En el cuadro de diálogo Configuración de ODBC Microsoft Access aparecen los siguientes controles: Nombre del origen de datos: Es el nombre que daremos a la conexión DSN Descripción: En blanco de forma predeterminada, puede contener un calificador descriptivo, es decir un comentaros sobre el origen DSN. Base de datos:. Se usará Seleccionar para abrir una base de datos existente o Crear para una nueva. Con “Reparar…” se puede corregir una base de datos Access dañada y con “Compactar…” se puede reducir espacio. Base de datos del sistema: Se usará para seleccionar una base de datos compartida (“.mdw”). El nombre del usuario predeterminado es Admin y la contraseña de Microsoft Access para el usuario Admin es una cadena vacía. Opciones: Perimte cambiar las siguientes opciones de controlador: Tiempo de espera de página. El tiempo (en décimas de segundo) que una página no utilizada permanece en el búfer. Siempre debe ser mayor que 0. Tamaño de búfer. El tamaño del búfer interno en kilobytes, que utiliza Microsoft Access para transferir datos desde y al disco. Puede ser cualquier valor entero divisible por 256. Restricciones del acceso a la base de datos (Exclusivo y/o solo lectura). Avanzadas: Permite opciones adicionales para el rendimiento del controlador, tales como decisiones ante transacciones, numero de subprocesos admitidos, etc.) En el ejemplo paso por paso se ve que el origen de datos se designa como “miDSN”, como se usó en el primer ejemplo de código PHP, se incluye una descripción y se vincula a la base de datos Access “agenda.mdb”. Diferentes tipos de DSN: DSN de usuario El DSN (Nombre de origen de datos) de usuario es un origen de datos que es específico de un usuario que se almacena localmente, pero sólo está disponible para el usuario que lo ha creado. Los orígenes de datos DSN de usuario se utilizan con comandos de Microsoft Jet, ODBC o lenguaje de consulta estructurado (SQL), pero no se utilizan con Microsoft Query. Se almacenan en el registro de Windows bajo la siguiente clave: Orígenes de datos de HKEY_CURRENT_USER\Software\Odbc\Odbc.ini\Odbc DSN de sistema A diferencia de un origen DSN de usuario, un DSN de sistema no es específico de un usuario. Un DSN de sistema se almacena localmente y no está dedicado a un usuario concreto sino que cualquier usuario que inicie sesión en un equipo con permiso para accesder al origen de datos puede utilizar ese DSN de sistema. Algunos programas, como Microsoft SQL Server o el servidor Microsoft Internet Information Server (IIS), requieren un DSN de sistema y el origen DSN debe crearse en el servidor donde se encuentre dicho programa. Los DSN del sistema se almacenan en el Windows bajo la clave siguiente: Orígenes de datos de HKEY_LOCAL_MACHINE\Software\Odbc\Odbc.ini\Odbc DSN de archivo Un origen de datos DSN de archivo se crea localmente y puede compartirse entre usuarios. Está basado en un archivo, lo que significa que el archivo “.DSN” contiene toda la información necesaria para conectarse al origen de datos. Tenga en cuenta que debe instalarse el controlador ODBC localmente para utilizar un DSN de archivo. Microsoft Jet y ODBC no utilizan orígenes DSN de archivo, en tanto que Microsoft Query los utiliza. Los DSN de archivo no se almacenan en el registro de Windows, sino que lo hacen de manera predeterminada en la carpeta ..\Archivos de programa\Archivos comunes\ODBC\Data Sources. El archivo “.DSN” es un archivo de texto que puede verse en cualquier editor de texto, como el Bloc de notas de Microsoft. Para crear un archivo DSN que señale a un DSN de sistema, siga estos pasos: 1. En un editor de texto, como el Bloc de notas de Microsoft, escribir las dos líneas siguientes en un documento nuevo [ODBC] DSN = MiDSNdesistema donde "MiDSNdesistema" es el nombre de un DSN de sistema existente que se haya instalado en la herramienta ODBC en el panel de control. 2. Guardar con un nombre que incluya una extensión de archivo “.DSN” para el DSN de archivo; por ejemplo, las siguientes es un nombre válido: "DBase4.dsn" También se puede compartir un origen DSN de archivo con otros usuarios. Para ello, se deberá compartir la carpeta en la que se almacena el archivo de DSN Nota : cada usuario debe instalar el controlador ODBC adecuado (el controlador que hace referencia el DSN de archivo) en el equipo para el DSN de archivo para que funcione correctamente. Un ejemplo: Supongamos la existencia de una tabla “Contactos” en la base “agenda.mdb” conectada mediante un origen DSN. El siguiente código listará lel contenido de los dos primeros campos de todos los registros. <?php $conexion= odbc_connect("miDSN", "", ""); $query = "SELECT * FROM Contactos"; $resultado = odbc_do($conexion, $query); while( odbc_fetch_row($resultado) ) { echo odbc_reult($resultado,1).” ”. odbc_reult($resultado,1).” ”. odbc_reult($resultado,1).” </br>”; } odbc_close($conexion); ?> odbc_connect() opera como ya fue explicado al comienzo. $query contiene el texto de una consulta SQL. odbc_fetch_row(resource $result_id [, int $row_number ]) Trae una fila (registro) del conjunto de datos que fueron devueltos por odbc_do () o por odbc_exec(). Después de que se llame el odbc_fetch_row(), los campos de ese registro se pueden direccional con odbc_result() y el indice se autoincrementa apuntando automáticamente a la tupla (registro) siguiente. odbc_result() permite consultar el contenido de cada campo indicado con el número pasado como segundo parámetro. Otro ejemplo usando una búsqueda: En este caso la aplicación PHP recibe un nombre de usuario y una clave pasados desde un formulario HTML mediante el método POST, para buscarlos de una tabla. <?php $conexion = odbc_connect("unaDSN","","") or die("No se puede conectar a la base de datos"); $consulta = "SELECT id_cliente, nombre, apellido FROM clientes WHERE apellido = $_POST[user] and nro_doc = $_POST[pass]"; $res_consulta = odbc_exec($conexion, $consulta) or die ("ERROR"); while(odbc_fetch_row($res_consulta)){ $idUsuario = odbc_result($res_consulta,1); $nombreyapellido = odbc_result($res_consulta,2).",".odbc_result($res_consulta,3); $usuario = $_POST[„user‟]; $password = $_POST[„pass‟]; } … … ?>