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

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.

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:

etc…

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

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:

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:

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.

  • Existe alguma forma de fazer a conexão a outro banco mas ainda trabalhando com os models?
    Obrigado!

  • Olá Tiago

    Dentro do model você escolhe com qual banco vai trabalhar. Basta carregar o banco de dados desejado e usá-lo como é mostrado no exemplo.
    Talvez para querer separar melhor sua aplicação, seja interessante criar um model específico pra cada banco de dados, assim não corre o risco de misturar tudo e ficar difícil de entender.

    Fabio

  • Foi o que eu fiz! obrigado pela ajuda! 🙂

  • Oi Fabio Parabens Novamente! Ja virei fregres de suas dicas!
    Amigo, estou precisando instalar um sistema, feito com codeigniter, instalar uma instancia do programa para funcionar com varios clientes. O sistema eh o mesmo, mas cada cliente com seu banco individual. Atualmente eu instalei em sub-dominios, estah funcionando, mas precisei fazer uma copia do sistema para cada sub-dominio. O que vc me aconselha? abracos, aguardo.

  • amigo Fábio S. Reszko!
    Parabens novamente!
    Um artigo muito util.
    Gostaria de saber como pegar o link/banco mysqli no codeigniter.
    E para complementar a seguinte instrucao:
    $sSearch = mysqli_real_escape_string(xxxxxxxxxxxx , $this->ci->input->post(‘sSearch’));
    No local do xxx entraria o link(conexao) mysqli.

    SE fosse no mysql seria mysqli_real_escape_string($this->ci->input->post(‘sSearch’)); Pois no mysql vc liga o banco no ato da conexao.

    Saberia me informar?
    aguardo
    abracos

  • Olá José

    Pelo que entendi você quer pegar os dados de conexão a um banco dinamicamente? Não sei se dá pra fazer isso e também não saberia lhe informar como fazer. Fico devendo.

    Fabio

  • João Carlos

    Fala Fabio, tudo bem ?
    Amigo, consegui implementar a ideia usando o CI3 o problema e que estou me deparando com o seguinte erro:

    A Database Error Occurred

    Error Number: 1054
    Unknown column ‘nome@email.com’ in ‘field list’
    INSERT INTO table (email@mail.com) VALUES (”)
    Filename: models/Welcome_model.php

    Line Number: 9

    Sabe o por quê desse erro, pode me auxiliar ?

  • Olá João. Este erro está dizendo que o mysql não está conseguindo encontrar uma coluna chamada nome@email.com na sua tabela. Talvez você tenha errado na criação do comando SQL.