Nota: Este documento pretende presentar exclusivamente los aspectos relativos a la
conexion entre PHP y Oracle.
Entorno de Trabajo: El servidor en el cual se trabajara sera Arcadia (152.74.52.3). Para ello pueden conectarse por SSH y FTP con los nombres de usuario y contrasea que se daran en clase.
Este servidor cuenta con servidor apache 1.3 y Php 4.4 con el set de Iunciones OCI activados.
Pueden ver sus archivos Php por la direccion http://arcadia.inI.udec.cl/usergrupo en donde el usuario del grupo es el que se dara en clases.
Esta Iuncion crea una conexion con la base de datos. Devuelve true si se conecta y Ialse en caso contrario. Una variante es ociplogon( string nombreusuario, string contrasenya |, string bd |) que crea una conexion permanente.
Ejemplo: En este ejemplo se intenta realizar una conexion con la base de datos, de ser asi se escribe 'Conectado por pantalla, en caso contrario se escribe 'Error en la conexion
Notar la cadena //arcadia.inI.udec.cl:1522/mazanga esa es la manera correcta de indicar la BD y su instancia correspondiente.
Desconectandose de Oracle
ocilogoff (int identiIicador)
Donde identiIicador es el valor (opcional) que retornan las Iunciones de conexion.
Ejemplo: En este ejemplo nos conectamos y luego desconectamos de oracle con la Iuncion ocilogoII:
Realizando Consultas en Oracle ? iI(ociplogon('usuario','pass','//arcadia.inI.udec.cl:1522/mazanga')) echo "Conectado!";} else echo "Error en la conexion;} ?~ ? iI($identiIicador ociplogon('usuario','pass','//arcadia.inI.udec.cl:1522/mazanga')) echo "Conectado!";} else echo "Error en la conexion;} ocilogoII($identiIicador); ?~ El proceso de realizar consultas se divide en 2 partes: 1. Crear la consulta y veriIicar que este sintacticamente correcta. 2. Ejecutar la consulta.
Para crear la consulta, generalmente creamos una variable que la contenga y luego aplicamos sobre esa variable el comando OciParse.
OciParse(int identiIicadorconexion, string consulta) El identiIicador de la conexion es opcional, esta Iuncion retorna el identiIicador de la query si la consulta esta correctamente Iormulada y False en caso contrario.
Para ejecutar la consulta se usa la Iuncion OciExecute(int idconsulta, int modo) en donde 'modo puede ser:
1. OCICOMMITONSUCCESS: para que los cambios se guarden automaticamente. 2. OCIDEFAULT: para que sea necesario aplicar un OciCommit para conIirmar las consultas hechas.
Ejemplo:
Seguimiento: Lo primero que se hace es intentar crear una conexion con la BD, el identiIicador de la conexion se guardara en $conexion. Luego se guarda la consulta en la variable $consulta, lo que se intentara hacer es actualizar la matricula de un alumno. Notese el uso de la Iuncion OCIError, esta Iuncion captura el error en caso de que exista y lo despliega por pantalla. Si no hay error, entonces se ejecutara el comando, con el modo COMMIT activado por lo que no es necesario hacer un commit nuevamente. ? $conexion OciLogon("usuario", "password","//arcadia.inI.udec.cl:1522/mazanga"); iI ($conexion)
echo "Conectados!"; } else
echo "Error al conectar"; } $consulta "update alumno set matricula '123' where matricula '221'"; $idconsulta ociparse($conexion,$consulta); iI (!$idconsulta)
Como muchas de las consultas que se hacen a la BD entregan tuplas que deseamos ver, necesitamos conocer algun mecanismo para mostrarlas por pantalla. Para esto usamos OCIFetchStatement(int idconsulta, array resultados)
Esta Iuncion toma el arreglo que resulta de realizar un select y guarda los datos en la variable resultados. Esta variable contiene los encabezados de cada columna y los valores que hay en estas; con un ejemplo quedara mas claro:
? /* OCIFetchStatement example mbrittonverinet.com (990624) */
Ior ( $i 0; $i $nrows; $i ) reset($results); print "TR~\n"; while ( $column each($results) ) $data $column|'value'|; print "TD~$data|$i|/TD~\n"; } print "/TR~\n"; } print "/TABLE~\n"; } else echo "No data IoundBR~\n"; } print "$nrows Records SelectedBR~\n";
OCIFreeStatement($stmt); OCILogoII($conn);
?~
Seguimiento: Lo que se hace en este ejemplo es crear una conexion a una base de datos cualquiera y luego realizar un select sobre la tabla EMP. Como se puede apreciar, una alternativa para el comando echo es el comando print. Luego de hacer la consulta se crea el encabezado de una tabla en html y luego mientras haya datos de encabezado en el arreglo (eso se ve con el while ( list( $key, $val ) each( $results )) se escribiran los titulos de las columnas.
Despues, lo que se hace es escribir el contenido de esas columnas o sea los valores que entrega el select y esto se hace mientras haya datos que colocar.
Finalmente se escribe la cantidad de tuplas que entrega la tabla, con la variable que retorna la Iuncion OCIFetchStatement.
Bibliografa:
1. Manual de Php http://cl2.php.net/manual/es/reI.oci8.php