Como configurar múltiplos bancos de dados no CodeIgniter?

Hoje vamos aprender a como configurar múltiplos bancos de dados no CodeIgniter.

Existem muitos casos onde você desenvolve um sistema que possui mais que um banco de dados. Às vezes você precisa se conectar em um banco MySQL e gravar os dados em um banco Oracle, por exemplo. E em alguns casos até um terceiro banco de dados pode entrar na jogada.

Veja no post abaixo a como configurar múltiplos bancos de dados no CodeIgniter.

O CodeIgniter já vem pré-configurado com diversos drivers de banco de dados. Por padrão e sem fazer muito esforço, você pode trabalhar com os seguinte bancos de dados:

Driver Banco de Dados
mysql MySQL
mysqli MySQLi
postgre Postgre
odbc ODBC
mssql SQL Server da Microsoft

Para trabalhar com qualquer um dos bancos de dados acima, basta informar o nome do driver na linha [‘dbdriver’].

Vamos fazer um exemplo onde você se conectará a dois bancos de dados. O padrão será o MySQL e o secundário será o Oracle.

Para isto, devemos criar dois grupos de configurações de conexão, um para cada banco.

Grupo de configuração para conexão ao banco MySQL

$active_group = 'default';
$active_record = TRUE;

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'user_banco';
$db['default']['password'] = '123abc';
$db['default']['database'] = 'clientes';
$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;

Repare que o grupo ativo, visto em active_group é o ‘default’, que é nossa conexão ao MySQL. Isto significa que para utilizar este banco em seus models basta fazer do jeito tradicional, ou seja, basta usar os códigos começando com: $this->db->get();

Vejamos agora, um grupo de configuração para o banco de dados Oracle.

$active_record = TRUE;

$db['oracle']['hostname'] = 'localhost';
$db['oracle']['username'] = '';
$db['oracle']['password'] = '';
$db['oracle']['database'] = '';
$db['oracle']['dbdriver'] = 'oci8';
$db['oracle']['dbprefix'] = '';
$db['oracle']['pconnect'] = TRUE;
$db['oracle']['db_debug'] = TRUE;
$db['oracle']['cache_on'] = FALSE;
$db['oracle']['cachedir'] = '';
$db['oracle']['char_set'] = 'utf8';
$db['oracle']['dbcollat'] = 'utf8_general_ci';
$db['oracle']['swap_pre'] = '';
$db['oracle']['autoinit'] = TRUE;
$db['oracle']['stricton'] = FALSE;

Aqui, mudamos 3 coisas:

1) não precisamos mais informar qual o active_group, pois já informamos lá emcima
2) mudamos o nome do grupo de default  para oracle. Isto é importante, pois este nome será utilizado para acessarmos este banco no model
3) mudamos o driver de conexão para oci8 na linha $db[‘oracle‘][‘dbdriver’] = ‘oci8’.

Feito isso, a configuração já está pronta.

Agora vamos ver como você acessa cada um dos bancos de dados dentro do seu model.

Para trabalhar com o banco de dados default, o MySQL, no nosso caso, basta utilizar as linhas de comando tradicionais:

$this->db->insert('tabela');

$this->db->get('tabela');

$this->db->where('tabela');

etc…

Mas para trabalhar com o banco de dados Oracle, você primeiro precisa carregá-lo dentro do seu model. Faça assim:

$oracle = $this->load->database('oracle', TRUE);

Aqui, criamos uma variável chamada $oracle que irá receber o Objeto de Banco de Dados do CodeIgniter. E também devemos passar como parâmetro o nome do grupo de conexão que criamos lá no arquivo database.php, que neste caso é oracle.

O parâmetro TRUE serve para retornar o Objeto de Banco de Dados. Sem isto, não funciona.

A partir deste momento, basta utilizar as linhas de comando da seguinte maneira:

$oracle->insert('tabela'); para inserir um registro

$oracle->get('tabela'); para selecionar registros

$oracle->where(''); condição.

E assim por diante.

A grande vantagem disto é que você pode inclusive mudar de bancos de dados de novo e mexer muito pouco ou quase nada no seu código, que tudo estará funcionando, pois com a funcionalidade Active Record do CodeIgniter, ele consegue traduzir o código SQL para todos os bancos de dados pré-configurados.

Depois de você utilizar o banco de dados, é interessante você fechar a conexão com ele para liberar recursos. Para isto faça assim:

$oracle->close();

Por hoje é isto. Abraços!

Fábio S. Reszko

Sou Programador PHP desde 2006 e eu acredito sinceramente que programar usando um Framework PHP é a solução para os problemas de códigos desorganizados, difíceis de entender e de dar manutenção no futuro. Se você também acredita nisto, então fique à vontade em explorar meu blog.