miércoles, mayo 01, 2013

Codeigniter con acceso a datos en Oracle XE 11g



Veremos en este post como conectar un proyecto desarrollado en Codeigniter a una base de datos de Oracle XE.

Antes de iniciar esta guía se ha trabajado con los siguientes recursos:
  •           Codeigniter versión 2.1.3
  •           Oracle database XE 11g Relase 2
  •           Xampp 1.7.4 VC6
Parto del hecho que ya sabes instalar y configurar codeigniter para un nuevo proyecto web con acceso a datos, al igual que tienes instalado el Xampp y  Oracle XE 11g.

Primero hay que habilitar las extensiones de php para poder trabajar con conexiones a Oracle. Esto se hace accediendo al archivo php.ini ubicado en la ruta C:\xampp\php\php.ini que procederemos a editarlo con cualquier editor de texto, puede ser el bloc de notas o el que ustedes prefieran. Una vez abierto ese archivo buscamos las líneas:

;extension=php_pdo_oci.dll
;extension=php_pdo_oci8.dll
;extension=php_oci8.dll

Al estar precedidas del símbolo de punto y coma quiere decir que no están habilitadas, procedemos a quitar el punto y coma para habilitarlas. Tendrán que quedar de la siguiente manera:

extension=php_pdo_oci.dll
extension=php_pdo_oci8.dll
extension=php_oci8.dll

Nota: estas líneas no están seguidas tal como en este ejemplo, por lo cual debes ubicarlas.

Guardamos los cambios en el archivo php.ini y se procede a recargar el servicio de Apache a través del Xampp control panel:


Una vez realizados estos cambios vamos a configurar el archivo database.php que esta en la ruta del framework codeigniter:  /application/config/database.php

Modificamos las líneas de la cadena de conexión y deben quedar de esta manera:

(Click en la imagen para ampliarla)

La variable $tnsname tiene los parámetros como protocolo, host, puerto, tipo de servidor y nombre del servicio.  

Los siguientes parámetros en los arrays de configuración:
  • $db[‘default’][‘hostname’] = en este caso tendrá el valor de la variable $tsname
  • $db[‘default’][‘username’] = el nombre del usuario que tiene privilegios para conectarse al schema con el que se trabajará en Oracle
  • $db[‘default’][‘password] = el password de ese usuario
  • $db[‘default’][‘database’] = esto haría referencia al SID de Oracle, en este caso estamos trabajado con xe
  • $db[‘default’][‘driver’] = driver para poder trabajar con el motor, en este caso el valor es Oracle
Estos son los valores más básicos para que la conexión sea correcta.

Crear Modelo
Vamos a trabajar con una tabla llamada PERSONAS la cual tiene la siguiente estructura:


(Click en la imagen para ampliarla)

Ahora vamos a crear un modelo en la carpeta application/models/ el cual llamaremos  model_oracle.php y su estructura tendrá el siguiente código:

(Click en la imagen para ampliarla)

Estamos haciendo un query sencillo para extraer los datos de una tabla llamada PERSONAS.

IMPORTANTE: En Oracle los objetos diferencian los caracteres de mayúsculas y minúsculas, al menos desde codeigniter hay que ser muy estricto con esto, razón por la cual al llamar la tabla esta denotada en mayúsculas.

Crear Controlador
Crearemos el controlador para que a través del modelo extraigamos los datos y luego renderizarlos en una vista. El controlador estará ubicado en la ruta /application/controllers/ y lo llamaremos oracle.php el cual tendrá la siguiente estructura:

(Click en la imagen para ampliarla)

Muy sencillo, en la línea 7 estamos cargando el modelo previamente creado, en la línea 8 en un array llamado $data[‘personas’]  entrego los datos a través del método model_oracle del modelo, y en la línea 9 cargo una vista llamada oracle_view con el array $data[‘personas’].

Creación de la vista
La vista que renderizará los datos estará creada en el directorio /application/views/ y la llamaremos oracle_view.php con la siguiente estructura en su código:

(Click en la imagen para ampliarla)

Con un foreach recorremos los valores del array data[‘personas’] y entonces con la clave $p se accede a cada campo de la tabla. Para el ejemplo nuevamente es recomendable diferenciar entre mayúsculas y minúsculas, tal como se puede apreciar se accede a los valores de la forma $p->IDENTIFICACION , $p->PRIMERNOMBRE etc…

Finalmente a través del navegador web accedemos a http://localhost/codeigniter/oracle (si tienen su proyecto configurado sin el index.php en la URL) o con http://localhost/codeigniter/index.php/oracle (si no han configurado el proyecto para eliminar el index.php ) y debe desplegar los datos de la siguiente forma:

(Click en la imagen para ampliarla)

5 comentarios:

Geistein dijo...

hola Gabriel, falta editar en el controller oracle agregar la linea

$this->load->database();

Anónimo dijo...

por qué cuando trato de insertar en la Base de Datos da error mostrándome la query de "INSERT ...", sin embargo es la misma query que cuando ejecuto en oracle sql developer me inserta, pero sin embargo desde del código de php no.

Anónimo dijo...

Para obtener los datos de tu consulta oracle activa el autoinit de la libreria db

$autoload['libraries'] = array('database');

en el archivo autoload.php

Dennis dijo...

Excelente el aporte para conectarse a Oracle. Le faltó dos cosas que lo agregaron Geistein y el Anonimo que dice del archivo autoload.php.
Gracias y saludos

Franz Bx. dijo...

Buenas tardes e realizado los pasos que estan en tu blog para mmostrar datos igual
pero me sale este error, no se si me puedas ayudar
=========================================================================
A PHP Error was encountered
Severity: Warning

Message: oci_execute(): ORA-00942: table or view does not exist

Filename: oci8/oci8_driver.php

Line Number: 286

Backtrace:

File: C:\wamp64\www\reportame_sap\application\models\Reporte_nota_venta_horaModel.php
Line: 20
Function: query

File: C:\wamp64\www\reportame_sap\application\controllers\Reporte_nota_venta_horaController.php
Line: 15
Function: getUsuarios

File: C:\wamp64\www\reportame_sap\index.php
Line: 315
Function: require_once

=========================================================================

=========================================================================
Error Number: 942

ORA-00942: table or view does not exist

select * from USUARIOS

Filename: C:/wamp64/www/reportame_sap/system/database/DB_driver.php

Line Number: 691
=========================================================================