Conexión a multiples bases de datos en Codeigniter

PIN
Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+

Me tope con el requerimiento de utilizar 2 base de datos en distintos servidores para mostrar información en unos mantenimientos y resulto facil esta mision aun que me tuvo un rato buscando la solucion pero aqui les detallo como solucionamos este problema.

nos vamos a

  • \application\config\database.php
la variable $db es una array multidimensional donde podemos agregar avrios nombres que esto nos sirve para signar otra base de datos por defecto cuando bajas siempre encuentras el array con el nombre default ahora copiamos lo mismo y le colocamos el nombre de nuestra otra base de datos que no es necesariamente que se llame tal cual como se llama tu base de datos:
ejemplo:
el nuevo que agrego

$db['MI_BASE_DE_DATOS']

el que esta por defecto

$db['default']

le damos los datos de conexion.

/*esta esta en otro servidor entonces debemos colocar la ip*/
$db['Billing']['hostname'] = 'xxxxxxxxxxx';
$db['Billing']['username'] = 'xxxxxxx';
$db['Billing']['password'] = xxxxxxxxxxx';
$db['Billing']['database'] = 'billing';
$db['Billing']['dbdriver'] = 'mysqli';
$db['default']['port'] = "3306";
$db['Billing']['dbprefix'] = '';
$db['Billing']['pconnect'] = TRUE;
$db['Billing']['db_debug'] = TRUE;
$db['Billing']['cache_on'] = FALSE;
$db['Billing']['cachedir'] = '';
$db['Billing']['char_set'] = 'utf8';
$db['Billing']['dbcollat'] = 'utf8_general_ci';
$db['Billing']['swap_pre'] = '';
 
$active_group = 'default';
$active_record = TRUE;
/*esta es la que tenemos en nuestro servidor*/
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'xxxx';
$db['default']['password'] = 'xxxxxxxx';
$db['default']['database'] = 'xxxxxxxxx';
$db['default']['dbdriver'] = 'mysqli';
$db['default']['port'] = "3306";
$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'] = '';

ahora desde un modelo o control podemos activar la conexion a la base de datos por que en codeignter solo tiene una que es la que colocamos pro defecto.
con esta linea de codigo lo activamos

$this->load->database("Billing",TRUE);

aqui un ejemplo de la conexion desde el modelo

class Cuentas_model extends CI_Model {
function __construct()
{
parent::__construct();
}
 
function get_accounts()
{
/*la conexion a la otra base de datos*/
$db_billing = $this->load->database("Billing",TRUE);
/*una consulta a esa base de datos*/
$query=$db_billing->query("select * from accounts");
return $query->result();
}
}

en el controlador

class Cuentas extends CI_Controller {
 
public function __construct(){
parent::__construct();
$this->template->set_layout('layout.php');
$this->load->model("Cuentas_model","Cuentas");
}
public function index()
{
$this->template->title('Cuentas');
/*llamamos al modelo y jalamos los datos*/
$data["listado"]=$this->Cuentas->get_accounts();
$this->template->build('distribuidores/cuentas/index',$data);
}
 
}

en la vista

foreach ($listado as $item):
echo $item->accountcode."<br />";
endforeach;

con esto ya estamos manejando 2 base de datos y si quieren con mas base de datos los mismos pasos pero agregan en el array de base de datos.

Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+

Hi, I'm luis rodriguez

Hola, Soy Luis Rodriguez, radico en Lima – Perú, formado en una carrera informática, desempeñando desde el 2007 como programador web y viendo proyectos desde Front End y Back End a lo que me perfile como Full Stack. Esta Experiencia junto a mi interés en la Analítica Web me ayudó mucho entender el funcionamiento interno de las herramientas de analítica, con las que vengo trabajo activamente desde 2017. Linkedin

http://luisrodriguez.pe

Leave Your Comments