domingo, 10 de noviembre de 2013

Conectar PHP con una base de datos Oracle

En esta entrada se muestra cómo acceder a una base de datos Oracle desde PHP usando el modulo OCI8. Para la realización de los ejemplos se usó un servidor Debian Wheezy, Apache2, PHP5 y Oracle Database 11g Express Edition.
Antes de empezar con el ejemplo en PHP se debe instalar el módulo OCI8 en nuestro servidor, para lo cual hay que seguir los siguientes pasos:
  • Instalar los paquetes buil-essential, php5-dev, php-pear y libaio1.
$ sudo apt-get install build-essential php5-dev php-pear libaio1 
  • Desde el siguiente enlace Instant Client Package descargar las versiones basic y sdk, guardarlas en el directorio /usr/local/lib, luego descomprimir los archivos.
$ sudo unzip instantclient-basic-linux.x64-12.1.0.1.0.zip 
$ sudo unzip instantclient-sdk-linux.x64-12.1.0.1.0.zip
  •  Luego crear el enlace simbolico a la librería libclntsh.
$ cd instantclient_12_1 $ sudo ln -s libclntsh.so.12.1 libclntsh.so
  • Añadir las variables de entorno necesarias para la instalación al archivo /etc/environment.
$ sudo nano /etc/environment Y agregar las siguientes líneas:

# Oracle Instant Client
LD_LIBRARY_PATH="/usr/local/lib/instantclient_11_2"
TNS_ADMIN="/usr/local/lib/instantclient_11_2"
ORACLE_BASE="/usr/local/lib/instantclient_11_2"
ORACLE_HOME=$ORACLE_BASE
  • Instalar el módulo OCI8 con el comando pecl.
$ sudo pecl install oci8 

Durante el proceso de instalación se nos pedira la ubicación de la librería 

...
Please provide the path to the ORACLE_HOME directory. Use 'instantclient,/path/to/instant/client/lib' if you're compiling with Oracle Instant Client [autodetect] :
 

aquí se debe introducir instant,/usr/local/lib/instantclient_12_ y luego al finalizar la el proceso se podrá ver un mensaje similar al siguiente

Build process completed successfully
Installing '/usr/lib/php5/20100525/oci8.so'
install ok: channel://pecl.php.net/oci8-2.0.6
configuration option "php_ini" is not set to php.ini location
You should add "extension=oci8.so" to php.ini
  • Como lo indica el mensaje anterior hay que agregar el módulo oci8 al archivo de configuración de php, para lo cual creamos un archivo oci8.ini en /etc/php5/conf.d/.
$ sudo nano /etc/php5/conf.d/oci8.ini Y agregar la línea extension=oci8.so
  • Reiniciar el servicio apache 
$ sudo service apache2 restart
  • Ahora hay que comprobar que el módulo esté habilitado, para esto usamos la función phpinfo creando una página con el siguiente código:
<?php phpinfo(); ?> 

Al cargar la página hay que buscar el módulo oci8 el cuál se verá como la siguiente imagen:

Finalmente podemos usar las funciones del módulo oci8 para conectarnos con una base de datos Oracle, el siguiente código consulta la tabla countries del esquema hr y los muestra en una tabla:
<?php
  $c = oci_connect("hr", "welcome", "localhost/XE");
  $s = oci_parse($c, "select country_name from countries");
  oci_execute($s);
  echo "<table border='1'>\n";
  while (($row = oci_fetch_array($s, OCI_ASSOC)) != false) {
   echo " <tr>\n";
   echo " <td>".htmlentities($row['COUNTRY_NAME'])."</td>\n";
   echo " </tr>\n";
  }
  echo "</table>\n"; }
?> 

La función oci_connect realiza la conexión con la base de datos, oci_parse prepara la sentencia sql, oci_execute ejecuta la consulta y con oci_fetch_array se recorre los registros devueltos por la base de datos.

Al cargar la anterior página se podrá ver un listado como el siguiente.


Para más detalles sobre la funciones del módulo OCI8 se puede consultar el manual de PHP en este enlace.

No hay comentarios:

Publicar un comentario

Conectar PHP con una base de datos Oracle

En esta entrada se muestra cómo acceder a una base de datos Oracle desde PHP usando el modulo OCI8. Para la realización de los ejemplos se u...