jueves, 7 de agosto de 2014
Codeigniter - Múltiples conexiones a base de datos
Este tema es uno de los temas primordiales sobre el framework Codeigniter, ya que en alguna ocación nos hemos visto obligados a recoger datos de diferentes bases de datos, o incluso diferentes tipos de bases de datos como por ejemplo, MySQL y Oracle, o incluso contra dos bases de datos MySQL.
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.
Related Posts
Suscribirse a:
Enviar comentarios
(
Atom
)
Sígueme en las Redes Sociales
Donaciones
Datos personales
Entradas populares
-
En este apartado vamos a explicar como ejercutar archivos PHP a través del terminal de Ubuntu. Lo primero que tendríamos que hacer es inst...
-
En este blog voy a comentar un tema que se utilizan en casi todas las páginas web que existen, y es el tema de la paginación. La paginaci...
-
Este post trata de la integración de la librería PHPExcel en Codeigniter, aunque se podría aplicar a cualquier librería, como por ejemplo mP...
-
Ejemplo para añadir o sumar un número determinado de hora/s, minuto/s, segundo/s a una fecha en php. Con la función strtotime se puede ...
-
Este tema es uno de los temas primordiales sobre el framework Codeigniter, ya que en alguna ocación nos hemos visto obligados a recoger dato...
© Espacio Daycry - Espacio de programación 2013 . Powered by Bootstrap , Blogger templates and RWD Testing Tool
No hay comentarios :
Publicar un comentario