INTRODUCCIÓN
Una vez que el servidor web ha solicitado al intérprete de PHP la ejecución de un determinado Script puede
contener sentencias que pretendan manipular datos almacenados en un gestor de base de datos, cualquier
operación sobre ello se debe realizar a través de la interfaz proporcionada por el gestor.
La forma en que el intérprete de PHP y el gestor se pueden conectar consiste en un API estándar, que
presenta una capa de software que oculta detalles de conexión. Para poder utilizarla solamente hace falta
instalar o activar en el gestor correspondiente el módulo de software encargado de su gestión y realizar las
llamadas correspondientes desde el programa, es decir usar funciones de acuerdo al fabricante.
A lo largo de este capitulo se va ha mostrar la utilización de ODBC con un gestor como es Microsoft Access
que funciona solamente en entorno WINDOWS.
Antes de comenzar a trabajar con Microsoft Access de debe crear una base de datos en blanco
(empleados.mdb)
1° presionar la tecla Windowas + R en la ventana digitar msaccess para cargar el Microsoft Access
CLIC
AQUI
En entornos Microsoft Windows, esta función se realiza para crear un origen de datos con la que se va ha
establecer la conexión, es decir que hay que declarar que se va ha utilizar la base de datos Access con la
interfaz ODBC, para ello ir al panel de control y elegir herramientas administrativas ( Windows + R –
Control) luego el icono de Orígenes de datos (ODBC 32 bits), para crear un origen de datos.
Hacer clic en el botón Agregar y elegir el tipo de gestor de base de datos que se desea conectar en este caso
se trata del controlador de Microsoft Access Driver(*.mdb), tras la elección y al pulsar finalmente el botón
Finalizar.
Hay que destacar para trabajar con bases de datos suele constar de los siguientes pasos:
Se establece la conexión que permite solicitar los datos al gestor (a través de l ODBC).
Se compone la instrucción SQL que se desea ejecutar, de tal forma que dicha instrucción se almacena en una
variable de tipo cadena con el objeto de pasarla completamente al gestor de base de datos.
Se solicita al gestor que ejecute la instrucción generada.
En caso de que se necesite, se procesa el resultado obtenidote la ejecución.
Se liberan los recursos utilizados en la consulta y se cierra la conexión con el gestor.
EJEMPLO 01
En este ejemplo se realiza una conexión a la base de datos empresa de Microsoft Access y luego se crea una
tabla llamada Empleados y por ultimo se inserta un registro.
echo $consultaSQL,"<BR>\n";
// Se solicita la ejecución de la nueva instrucción (Insert)
$resultado = odbc_do($conexion, $consultaSQL);
if ($resultado)
echo "<BR><B>Datos insertados</B><BR>\n";
else
die("Error en la inserción");
// Se cierra la conexión
odbc_close($conexion);
?>
<BR><HR></BODY></HTML>
echo $consultaSQL,"<BR>\n";
Como muestra en la Figura, Para comprobar que todo funciona correctamente se debe iniciar Microsoft
Access para verificar si se ha insertado un Registro.
ODBC_CONNECT
Descripción
int odbc_connect (string dsn, string user, string password [, int cursor_type])
Devuelve una conexión ODBC id, o 0 (FALSE) cuando ocurre un error.
La conexión id devuelta por estas funciones es necesaria para otras funciones ODBC. Se pueden tener
multiples conexiones abiertas a la vez. El opcional cuarto parámetro asigna el tipo de cursor que va a ser
usado para esta conexión. Este parámetro normalmente no es necesario, pero puede ser útil para trabajar
sobre problemas con algunos drivers ODBC.
ODBC_DO
Sinonimo de odbc_exec()
Descripción
string odbc_do (int conn_id, string query)
odbc_do ejecutara una consulta (query) sobre la conexión dada.
ODBC_CLOSE
Descripción
void odbc_close (int connection_id)
odbc_close() cerrara la conexión al servidor de bases datos asociado con el identificador de conexión dado.
Nota: Esta función fallara si hay transacciones abiertas sobre esta conexión. La conexión quedara abierta en
ese caso.
EJEMPLO 02
INSERCION DE DATOS
Normalmente los datos que hay que insertar en una tabla provienen de un formulario rellenado por el usuario
para ilustrar esto se ha desarrollado un script en PHP llamado formempleado.html, en donde el usuario
ingresará los datos a guardar en la tabla.
Este Script permite detectar que deben insertar datos en los campos CodEmp y Sueldo, adecuados para que
se realice la inserción.
Este programa producirá la salida de la siguiente página, el cuál mostrará que se ha insertado un tupla.
De igual manera que en caso anterior se debe iniciar Microsoft Access para verificar la inserción del
nuevo registro.
La inserción en esta tabla de un código existente provocaría un error en la página, para evitar este
comportamiento antes de hacer la inserción de debe comprobar que dicho valor no exista previamente.
EJEMPLO 03
<!-- insercioncomprobada.php-->
<?php
// Se establece la conexión con la fuente de datos
$conex = odbc_connect("empresa", "afg", "afg");
if (!empty($CodEmp))
{
$consultaSQL = "SELECT * FROM empleados";
$consultaSQL .= " WHERE CodEmp='$CodEmp';";
// Se ejecuta la consulta con el valor a insertar
$resultado = odbc_do($conex,$consultaSQL);
// Se solicita la primera fila obtenida
$Hay_Filas = odbc_fetch_row ($resultado);
if ($Hay_Filas)
{
// Si hay una fila, el valor ya existía en la tabla
echo "<B>Código: $CodEmp\n";
echo "<BR>Fila ya existente<BR></B>\n";
}
else
{
// Si no hay filas con ese valor, se inserta
$consultaSQL ="INSERT INTO empleados VALUES ('$CodEmp',
'$Nombre', '$Categoria', $Sueldo, '$CodDpto');";
echo "<BR>$consultaSQL\n";
$resultado = odbc_do($conex, $consultaSQL);
if ($resultado)
echo "<BR>Tupla insertada<BR>";
} // del else
} // de if (!empty($CodEmp))
// Se cierra la conexión
odbc_close($conex);
?>
Como se comento anteriormente se deseaba insertar un empleado con un código existente, entonces el
programa de comprobación muestra la siguiente pantalla, indicando que el código ingresado ya Existe en la
tabla.
EJEMPLO 04
Se explicará el proceso que se va ha realizar para realizar una lectura de los registro de una tabla.
Se establece la conexión.
Se crea la instrucción SQL que ejecuta la consulta.
Se solicita la ejecución de la instrucción SQL.
Se recibe un identificador en el que están los datos obtenidos a través del gestor. La estructura de datos
creada se puede recorrer secuencial mente.
Se procesa la información obtenida.
Se libera los recursos utilizados y se solicita el cierre de la conexión.
Como puede observar se muestra todo el contenido de la tabla, el número de Filas recuperadas y el número
de columnas.
ODBC_FETCH_ROW
Busca un registro.
Descripción
odbc_fetch_row() busca un registro de datos que fue devuelta por odbc_do() / odbc_exec(). Después de que
odbc_fetch_row() sea llamado, se puede acceder a los campos de este registro con odbc_result().
Si no se especifica row_number, odbc_fetch_row() intentara buscar el siguiente registro en los resultados.
Lamar a odbc_fetch_row() con o sin row_number puede ser mezclado.
Para pasar a través del resultado mas de una vez, se puede llamar a odbc_fetch_row() con row_number 1, y
después continuar haciendo odbc_fetch_row() sin row_number para revisar el resultado. Si un driver no
admitiese búsquedas de registros por número, el parámetro row_number seria ignorado.
ODBC_RESULT
Descripción
field puede ser cualquier contenido del campo que queramos; o puede ser una cadena que contenga el
nombre del campo; Por ejemplo:
$item_3 = odbc_result($Query_ID, 3 );
$item_val = odbc_result($Query_ID, "val");
La primera sentencia odbc_result() devuelve el valor del tercer campo dentro del registro actual de la cola
resultante. La segunda función llama a odbc_result() y devuelve el valor de un campo cuyo nombre es "val"
en el registro actual de la cola resultante. Ocurre un error si un número de columna para un campo es menor
que uno o excede el número de campos en el registro actual. Similarmente, ocurre un error si un campo con
un nombre que no sea uno de los nombres de campo de una tabla o tablas que sea o sean encoladas.
Los índices de campo comienzan en 1. Recordando el método binario de campos con gran información, es
devuelto con referencia a odbc_binmode () y odbc_longreadlen().
ODBC_FREE_RESULT
Descripción
int odbc_free_result (int result_id)
odbc_free_result() solo necesita ser llamado en caso de preocupación por demasiado uso de memoria cuando
se ejecuta un script. Toda la memoria resultante quedara automáticamente liberada cuando el script finalice.
Pero si es seguro que no se vaya a necesitar la información nada mas que en un script, se deberá llamar a la
función odbc_free_result(), y la memoria asociada con result_id sera liberada.
EJEMPLO 05
CONSULTA DE TABLAS
La siguiente consulta muestra una consulta de la tabla Empleados, observe que al final contiene un error -1,
resultado obtenido a través de la función odbc_num_rows, como puede observar en el gráfico no funciona
adecuadamente.
Este formulario sirve para realizar consultas individuales de registro a registro y se basa en las mismas
funciones expuestas en este programa, pero variando la instrucción SQL con una determinada condición de
búsqueda y así generar la pantalla con aspecto de formulario en vez de una tabla.
ODBC_NUM_FIELDS
Descripción
ODBC_NUM_ROWS
Descripción
ACTUALIZACION DE DATOS
La programación de una actualización de datos en PHP se realiza básicamente de igual manera que las
consultas, encontrando la diferencia en la consulta SQL, se debe utilizar la instrucción UPDATE,
evidentemente la lógica del programa debe realizar la comprobación de que fila se desea actualizar.
EJEMPLO 07
En este ejemplo se muestra todos los registros de la tabla empleado, como puede apreciar hay una
columna (Modificar), que contiene un enlace a un programa en donde mostrará los datos del registro
seleccionado.
EJEMPLO 08
Como observa en este formulario muestra los datos del registro seleccionado, el usuario podrá cambiar los
datos de dicho registro y luego deberá hacer click en el Botón Grabar.
maxlength=6></td>
</tr> <tr> <td>Apellidos y Nombres:</td>
<td><input type="Text" name="t2" value="<?echo $Campo2 ?>" size=40
maxlength=40></td></tr>
<tr> <td>Categoría:</td>
<td><input type="Text" name="t3" value="<?echo $Campo3 ?>" size=40
maxlength=40></td></tr>
<tr> <td>Sueldo:</td>
<td><input type="Text" name="t4" value="<?echo $Campo4 ?>" size=40
maxlength=40></td></tr>
<tr> <td>Departamento:</td>
<td><input type="Text" name="t5" value="<?echo $Campo5 ?>" size=40
maxlength=40></td></tr>
</tr> </table> <p>
<input type="submit" value="Grabar">
<input type="reset" value="Cancelar">
</p></FORM> <br>
<a href=MuestraTodos.php>Mostrar Registros</a><p>
</CENTER></BODY></HTML>
Después de hacer clic en el botón Grabar, mostrará la siguiente pantalla, indicando que el registro ha sido
Actualizado.
ELIMINACIÓN
Las operaciones de borrado se efectúan exactamente igual al programa anterior, con su correspondiente
instrucción de eliminación (delete)
EJEMPLO 08
Observe el último registro (E7, Campos Olivos Juan, Administrador, 1800, D2), será eliminado con el
siguiente programa Eliminar.php
Al igual del programa anterior, mostrará la siguiente pantalla, indicando que el registro ha sido eliminado.