El siguiente ejemplo ilustrará como conectar una aplicación Codeigniter a diferentes tipos de bases de datos:
El archivo que tenemos que modificar se llama database.php, que se encuentra dentro de la carpeta config, que es el archivo que contiene los datos de conexión a diferentes bases de datos.
$active_group = 'default'; $active_record = TRUE; $db['default']['hostname'] = 'host'; $db['default']['username'] = 'user'; $db['default']['password'] = 'pass'; $db['default']['database'] = 'bbdd'; $db['default']['dbdriver'] = 'mysql'; $db['default']['dbprefix'] = ''; $db['default']['pconnect'] = TRUE; $db['default']['db_debug'] = TRUE; $db['default']['cache_on'] = FALSE; $db['default']['cachedir'] = ''; $db['default']['char_set'] = 'utf8'; $db['default']['dbcollat'] = 'utf8_general_ci'; $db['default']['swap_pre'] = ''; $db['default']['autoinit'] = TRUE; $db['default']['stricton'] = FALSE; $db['drupal']['hostname'] = 'host'; $db['drupal']['username'] = 'user'; $db['drupal']['password'] = 'pass'; $db['drupal']['database'] = 'bbdd'; $db['drupal']['dbdriver'] = 'mysql'; $db['drupal']['dbprefix'] = ''; $db['drupal']['pconnect'] = TRUE; $db['drupal']['db_debug'] = TRUE; $db['drupal']['cache_on'] = FALSE; $db['drupal']['cachedir'] = ''; $db['drupal']['char_set'] = 'utf8'; $db['drupal']['dbcollat'] = 'utf8_general_ci'; $db['drupal']['swap_pre'] = ''; $db['drupal']['autoinit'] = TRUE; $db['drupal']['stricton'] = FALSE; $db['oracle']['hostname'] = 'host:1526/SID'; $db['oracle']['username'] = 'user'; $db['oracle']['password'] = 'pass'; $db['oracle']['database'] = ''; $db['oracle']['dbdriver'] = 'oci8';
El siguiente fichero muestra una configuración contra 3 bases de datos diferentes, 2 MySQL de las cuales una es un Drupal, y una conexión hacia una base de datos Oracle.
Como realizar las conexiones
Para realizar las conexiones yo aconsejo crear un archivo model por cada tipo de base de datos, ya que tendriamos perfectamente diferenciadas y ordenadas las consultas a cada tipo de base de datos.
Ejemplos
Imaginaros que hemos creado un archivo drupal_model.php que se encargará de realizar la conexiones a la base de datos de drupal.
El contenido de ese archivo sería el siguiente:
<?php class drupal_model extends CI_Model { private $db_b; function __construct(){ $this->db_b = $this->load->database('drupal', TRUE); } public function insert(){ $data = array('nombre' => 'Prueba'); $this->db_b->insert('tabla', $data); if( $this->db_b->affected_rows() > 0){ return $this->db_b->insert_id(); }else{ return 0; } } }
En esta clase hemos declarado una variable privada que contendrá el Id de conexión, que utilizaran los métodos para poderse conectar.
En el constructor de la clase cargamos la librería database pero indicando la base de datos Drupal, que es el mismo nombre que le hemos puesto en el archivo de configuración.
La función insert realizará una inserción en la base de datos, y devolverá el id del campo PK y autoincrement de dicha tabla, si la inserción ha sido fallida, devolverá un 0 para poder tratar el error en la aplicación.
El ejemplo para la conexión default sería idéntico a la clase drupal, simplemente modificando la base de datos a default, o simplemente escribiendo esta linea:
$this->db_b = $this->load->database();
Esto sólo se puede hacer cuando hay definida una conexión default, ya que si no se indica la base de datos, siempre cogerá los datos de la configuración de default.
Ejemplo Conexión Oracle
A este fichero le hemos llamado oracle_model.php, y contendrá las consultas a la base de datos Oracle.
<?php class oracle_model extends CI_Model { private $db_b; function __construct(){ $this->db_b = $this->load->database('oracle', TRUE); } public function get(){ $query = $this->db_b->query("query de consulta"); $result = $query->result(); return $result; } }
Este ejmplo podemos ver la que estructura de la clase es la misma, con la variable privada para la conexión, cargando la base de datos en el contructor, y creando el método para una consulta.
En los ficheros controladores de Codeigniter se tratan igual los datos independientemente del tipo de conexión que utilicemos.
Por ejemplo:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Gestor extends CI_Controller { public function __construct() { parent::__construct(); } public function index() { $datos['drupal'] = $this->drupal_model->insert(); $datos['oracle'] = $this->oracle_model->get(); } }
Este es un ejemplo absurdo, pero se puede comprender como realizar múltiples conexiones con una misma aplicación de Codeigniter.
Para mas información se puede consultar la librería database de Codeigniter.
No hay comentarios:
Publicar un comentario