MANUAL DE ODBC PARA PHP (by darknight) MANUAL DE ODBC PARA PHP ........................................................................................ 1 INTRODUCCIÓN................................................................................................................... 1 ¿Cómo, Cuándo y por qué usar ODBC? ................................................................................ 1 Conexión a Bases de Datos .................................................................................................... 2 Realizar una consulta ............................................................................................................. 3 Obtener los datos de una consulta ......................................................................................... 3 Número de filas y número de campos de una consulta .......................................................... 4 Relación entre nombre de campo y número de columna........................................................ 5 Otras funciones interesantes .................................................................................................. 5 Ejemplos prácticos ................................................................................................................. 5 Insertar un registro en la Base de Datos. ............................................................................ 5 Actualizar un registro de la Base de Datos. ........................................................................ 6 Eliminar un registro de la Base de Datos. .......................................................................... 7 Conclusiones Finales.............................................................................................................. 7 INTRODUCCIÓN. Este es un breve manual dónde intentaré explicar como usar ODBC en PHP, intentaré no divagar demasiado e ir directamente a los casos prácticos. Espero que os sea de ayuda. En este manual al referirme a ODBC, me refiero a las instrucciones con que PHP permite manejar un DSN de sistema que acceda a una base de datos de cualquier tipo, se da por supuesto que este DSN de sistema está correctamente configurado, apuntando a la base de datos deseada y con el controlador correcto para esta BD. Las instrucciones ODBC que se pueden utilizar con PHP, son muchas y muy sencillas, permitiéndonos de esta manera hacer todas las operaciones básicas necesarias para manejar una BD. ¿Cómo, Cuándo y por qué usar ODBC? Para empezar tres preguntas en una. Intentemos dar una explicación breve y global que intente responder a las tres a la vez, eso si, sin ponernos demasiado puristas, y aceptando cualquier otra opinión mejor formada. Usaremos ODBC cuando tengamos que atacar una base de datos que no sea ninguna de las que PHP maneja cómodamente, mediante instrucciones creadas específicamente para dichas BD, es decir, PostgresSQL, MySQL, y Oracle 8, principalmente. Aunque PHP también tenga instrucciones para otras BD. PHP tiene un repertorio de instrucciones para manejar ODBC, que por su sencillez hace, que una vez hemos aprendido a manejarlas correctamente nos resulte más sencillo trabajar siempre con estás instrucciones que no con otras de PHP para una BD concreta, ejemplo: INTERBASE. Si ya hemos aprendido a manejar una vez las instrucciones para ODBC, al manejar una BD ACCESS, en vez de buscar las instrucciones para INTERBASE, ver sus particularidades, el orden de los parámetros, el número de estos, etc., etc., pues podemos definir un DSN de sistema para acceder a la BD de INTERBASE, y atacar esta con las mismas instrucciones que ya conocemos. Por supuesto, esto tiene sus ventajas y sus inconvenientes, así que debe ser el diseñador el que tome la última decisión. Para terminar con este apartado, decir que para mi ODBC, no es una manera mejor, ni peor de acceder a una BD en concreto, es simplemente una opción más de la que disponemos. Conexión a Bases de Datos Para conectarnos a una base de datos, en general, necesitaremos la siguiente información: Equipo que alberga la base de datos Usuario de la base de datos Clave de la base de datos Nombre de la base de datos Puerto de la conexión Como resultado de estos datos debemos obtener un identificador de conexión que se utilizará posteriormente para realizar las distintas operaciones sobre la BD. Ahora veremos como se lleva a cabo la operación de conexión con la BD. (Los parámetros entre corchetes son opcionales) $conexion = odbc_connect($dsn, $usuario, $clave[,int tipo_cursor]); $conexion: Variable que utilizaremos para hacer referencia a la conexión establecida. $dsn: Variable que contendrá el nombre del DSN. También podemos utilizar directamente el nombre asignado a nuestro DSN entre comillas dobles. Ej: “GESTION” $usuario y $clave: Cómo sus nombres indican contendrán el nombre del usuario de la BD y la clave de la BD de dicho usuario. También es posible utilizar estos directamente encerrados entre comillas dobles. Ej: $conexion = odbc_connect("GESTION","usuario","clave") or die ("No se pudo conectar con Gestión"); Una conexión persistente con ODBC se realizaría con: $conexion = odbc_pconnect($dsn, $usuario, $clave[,int tipo_cursor]); Con ODBC, al contrario que ocurre con MySQL, no es necesaria una segunda instrucción para elegir la BD con la que vamos a trabajar ya que con el DSN, esta queda perfectamente identificada. Realizar una consulta Usando la expresión, $res = odbc_exec($conexion, $consulta); obtenemos un descriptor de los resultados de la consulta. Un ejemplo más detallado de como utilizar odbc_exec, con todos los pasos a seguir sería: //En esta línea construimos la consulta SQL $sqlcodfamilia = "select CODFAMILIA FROM FAMILIA WHERE DESCRIPCIO = '$familia' "; //Realizamos la consulta $rescodfamilia = odbc_exec($conexion, $sqlcodfamilia) or die ("no se ha podido realizar la consulta"); //Obtenemos el dato del campo deseado de la BD $codfamilia = odbc_result($rescodfamilia, "CODFAMILIA"); //Liberamos el espacio de memoria ocupado odbc_free_result($rescodfamilia); Todas estás instrucciones las veremos en profundidad a lo largo de este manual. Obtener los datos de una consulta La instrucción para obtener una determinada fila de una consulta sería: $fila = odbc_fetch_row($res[,$num_fila]); Si omitimos $num_fila recupera la siguiente fila de la consulta. Si lo ponemos recuperará ese número de fila. Un ejemplo práctico: //Construimos la consulta y la ejecutamos $sqltipo="SELECT TIPODOC FROM DOCUMENTOS ORDER BY TIPODOC"; $restipo=odbc_exec($basedoc,$sqltipo); //Este bucle recorre la consulta fila a fila, comprueba la condición e introduce los //resultados de la consulta en un desplegable. Como podemos observar si la consulta no tiene //resultados nunca entraría en el bucle. while(odbc_fetch_row($restipo)) { $tipo=odbc_result($restipo, "TIPODOC"); if($tipodoc==$tipo) { echo "<option selected>$tipo</option>"; } else { echo "<option>$tipo</option>"; } } echo "</select>”; //Liberamos el espacio de memoria ocupado por la consulta odbc_free_result ($restipo); Número de filas y número de campos de una consulta $num = odbc_num_rows($res); Obtiene el número de filas obtenidas en una determinada consulta. $num = odbc_num_fields($res); Obtiene el número de campos obtenidos en una determinada consulta. Relación entre nombre de campo y número de columna El argumento $res de la función que se describe a continuación se supone que es un descriptor de los resultados de una consulta, válido obtenido mediante una consulta previa. $nombre_campo = odbc_field_name($res, $num_campo); Devuelve en $nombre_campo, el nombre del campo de la BD, que esté en el número de columna indicada en $num_campo en el resultado de una consulta. Otras funciones interesantes Como hemos visto en un ejemplo anterior para obtener el valor de un campo de una consulta, bastará con esta instrucción: odbc_result($res, $campo); $campo, deberá contener el nombre del campo de la consulta cuyo valor se desea obtener. Se puede utilizar directamente el nombre del campo, encerrado entre comillas dobles. Para liberar el espacio de memoria ocupado por una consulta utilizaremos: odbc_free_result($res); Para cerrar la conexión con una base de datos utilizaremos: odbc_close($conexion); Es muy importante distinguir entre el descriptor de la consulta y el descriptor de la conexión, ya que son cosas totalmente distintas. Nos evitaremos muchos problemas si ponemos nombres significativos a nuestras variables. Ejemplos prácticos Insertar un registro en la Base de Datos. <? //Establece una conexión con la BD y lanza un mensaje de error en el caso de que esta no se haya realizado con éxito $conexion = ODBC_CONNECT("GESTION","USUARIO","jr4582") or die ("No se pudo conectar con Gestión"); //Inserta un registro en nuestra BD, en los campos indicados, con los valores que contengan las variables indicadas en la cláusula VALUES $sqlinsert ="INSERT INTO DOCUMENTOSFICHA (INDICE, DESCRIPCION, USUARIOALTA, FECHAALTA, USUARIOMOD, FECHAMOD, REF, AMPDESCRI, EMPRESA, RUTAACCESO, TIPODOC) VALUES ($indice, '$descripcion', '$cusuario', DATE(), '$cusuario', DATE(), '$referencia', '$observaciones', '$cempresa', '$ficherogz', '$tipo')"; odbc_exec($conexion, $sqlinsert); //Cierra la conexión con la BD y después de esto nos lleva a la página indicada en la instrucción header(); odbc_close($conexion); header("Location:principal.php"); ?> Actualizar un registro de la Base de Datos. <? //Establece una conexión con la base de datos y arroja un error, si esta no se ha realizado //con éxito $conexion = ODBC_CONNECT("GESTION","usuario","clave”) or die ("No se pudo conectar con Gestión"); //Actualiza una fila de nuestra Base de Datos tal y como se indica en la instrucción SQL $sqlUpd="UPDATE FICHADOC SET DESCRIFICHA='$descripcion', REF='$referencia', TIPODOC='$tdoc', AMPDESCRI='$observaciones' WHERE INDICE=$indice"; $res=odbc_exec($conexion, $sqlUpd) or die ("La actualización ha fallado"); //Después de ejecutar la instrucción volvemos a una página determina por el desarrollador header("Location:principal.php"); Eliminar un registro de la Base de Datos. <? // Establece una conexión con nuestra BD, arroja un error si esta no se ha realizado //correctamente, y la instrucción SQL borra el registro de la base de datos que coincida con //el valor de la variable $indice en la tabla FICHADOC $conexion = ODBC_CONNECT("GESTION","USUARIO","CLAVE") or die ("No se pudo conectar con Gestión"); $sql="DELETE FROM FICHADOC WHERE INDICE=$indice"; odbc_exec($conexion,$sql); //Después de ejecutar la instrucción volvemos a una página determina por el desarrollador header("Location:principal.php"); ?> Conclusiones Finales Casi siempre podremos utilizar ODBC, para comunicarnos con una Base de Datos de cualquier tipo, así que estas instrucciones, se puede decir, que son las más genéricas para la interacción con una BD y por lo tanto nos permiten obviar el tipo de la Base de Datos, con la que estemos trabajando, así como sus particularidades, lo cual en algunos momentos, sin duda, es una gran ventaja, y quizá nuestra mejor opción. Para intentar sacar el máximo partido a este breve manual, es recomendable que si aún no tenemos suficientes conocimientos de SQL busquemos un buen manual de SQL, que al fin y al cabo es el lenguaje que nos permitirá comunicarnos con la BD. Este manual es un primer acercamiento al manejo de BD mediante ODBC, y aunque como siempre la mejor manera de aprender es practicando, quizá estos pequeños ejemplos os ahorren mucho tiempo y trabajo, al menos esa es la intención. Perdonad los posibles errores.