Configuração de banco de dados (database) no CodeIgniter

8 de junho de 2010, em Passos Iniciais, por Tárcio Zemel

Configuração de banco de dados (database) no CodeIgniter

No artigo sobre instalação e configuração inicial do CodeIgniter, consta que um dos passos é configurar o arquivo próprio para especificar as informações de BD. Apesar de o arquivo ser todo comentado e estruturado de maneira simples, é possível elucidar ainda mais com um artigo explicando como é a configuração de banco de dados (database) no CodeIgniter.

database.php

As configurações de banco de dados no CodeIgniter é feita através do arquivo application/config/database.php. As configurações são armazenadas em um array multidimensional que segue o seguinte padrão:

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "";
$db['default']['database'] = "database_name";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";

Existe um motivo principal para essas informações serem armazenadas em um array multidimensional: a facilidade do CodeIgniter chega a tal ponto que trabalhar com múltiplos bancos de dados é, literalmente, tão simples quanto montar um array, ou seja, se for preciso trabalhar com vários BDs (um para produção, outro para testes, mais um para homologação, etc), basta criar mais um array com as respectivas informações!

Se, por exemplo, além das configurações “default”, fosse preciso trabalhar com um banco de testes, algo do tipo poderia ser feito:

$db['teste']['hostname'] = "localhost";
$db['teste']['username'] = "root";
$db['teste']['password'] = "123456";
$db['teste']['database'] = "database_name";
$db['teste']['dbdriver'] = "mysql";
$db['teste']['dbprefix'] = "";
$db['teste']['pconnect'] = TRUE;
$db['teste']['db_debug'] = FALSE;
$db['teste']['cache_on'] = FALSE;
$db['teste']['cachedir'] = "";
$db['teste']['char_set'] = "utf8";
$db['teste']['dbcollat'] = "utf8_general_ci";

Então, a variável $active_group permite escolher os grupos de conexão que estarão ativos – por padrão, somente o “default” está ativo.

Explicação dos valores

Como é possível ver, existem diversos valores no array, cada um prestando a servir determinada funcionalidade nas configurações de bancos de dados:

  • hostname. O hostname para a conexão (costuma ser “localhost”).
  • username. O nome de usuário usado para a conexão ao BD.
  • password. A senha necessária para se conectar ao banco.
  • database. O nome do banco de dados que se deseja conectar.
  • dbdriver. O tipo de banco de dados (mysql, postgres, odbc, etc).
  • dbprefix. Um parâmetro (opcional) que especifica prefixo para as tabelas. Especialmente útil quando se usa Active Records (que será explicado futuramente), permitindo múltiplas instalações do CI usarem um mesmo database.
  • pconnect. TRUE ou FALSE, especifica se vai ser usado persistent connection no projeto.
  • db_debug. TRUE ou FALSE, serve para mostrar ou não os erros de queries que possam vir a ocorrer.
  • cache_on. TRUE ou FALSE, marca se o database query caching (abordado em artigos futuros) será usado.
  • cachedir. Quando se usa o database query caching, é o caminho para o diretório de cache.
  • char_set. O character set usado para as comunicações com o banco.
  • dbcollat. O collation usado para se comunicar com o BD.
  • port. Opção usada somente com Postgres driver. Para usar a configuração, é necessário acrescentar mais uma linha ao array de configuração do database (ex. $db['default']['port'] = 5432;).

Palavras finais sobre configuração de bancos de dados

Dependendo da plataforma de banco de dados você está usando (MySQL, Postgres, etc), nem todos os valores do array de configuração serão necessários. Por exemplo, se estiver usando SQLite você não precisará fornecer um nome de usuário ou senha, e o nome do banco de dados será o caminho para o arquivo de banco de dados. Por padrão (e os exemplos apresentados) foram conforme o que se usa para bancos MySQL.

Reforçando ainda mais o fato de que o CodeIgniter é o melhor framework PHP, configurar um ou mais bancos de dados é tão simples quanto escrever algumas breves linhas de códigos. Somando este conhecimento ao básico sobre models e como fazer models, views e controllers trabalharem juntos no CodeIgniter, já é possível esboçar os primeiros “projetos de verdade”!

Vamos lá? ;-)

10 comentários em "Configuração de banco de dados (database) no CodeIgniter"

gravatar

Marcus Beckenkamp  em 22 de junho de 2010

To começando a usar o Code Igniter e to curtindo bastante o seu blog. As dicas são simples e bem objetivas!

Valeu!

gravatar

Ivan Santos  em 26 de junho de 2010

heheh Começando a usar o Code tbm .. Cara muito iradoo… na espectativa ods próximos posts

gravatar

Tárcio Zemel  em 6 de julho de 2010

@ Marcus Beckenkamp
@ Ivan Santos

Que bom que estão gostando! Fiquem ligados, mesmo, para as próximas novidades do CodeIgniter Brasil! ;-)

gravatar

Vitor  em 5 de agosto de 2010

Como faço para pegar o erro do banco de dados ao tentar inserir um dado duplicado por exemplo (#1062 – Duplicate entry ’123-meu@email.com’ for key ‘PRIMARY’)? Tentei usar do própio PHP (mysql_error) mas não está retornando nada!
Abraços e parabéns pelo site.

gravatar

Tárcio Zemel  em 26 de agosto de 2010

Recomendo não usar emails como chave-primária de tabelas… Geralmente o que se usa é um valor numérico com auto-incremento, o que evita este tipo de erro.

gravatar

Leonardo  em 13 de setembro de 2010

Muito bom o artigo!
Aproveito o embalo tbm para indicar meu primeiro artigo sobre codeIgniter…
http://leonardocaitano.com.br/codeigniter/criando-um-blog-em-codeigniter-parte-i/

gravatar

Tárcio Zemel  em 1 de fevereiro de 2011

Está muito interessante o artigo, Leonardo! Certamente uma grande contribuição para a comunidade CI!

Abraços!

gravatar

Marcio  em 27 de maio de 2011

Cara… seria interessante acompanhar também esse seu primeiro artigo sobre o CI, mas o link não funciona. Ajeita aí pra nós vai…
Valeu pela intenção.

gravatar

Anderson  em 20 de janeiro de 2012

Olá.
Estou criando um recurso para realizar backup num banco de dados MySQL.
Ao utilizar o driver 'mysql' tudo funciona perfeitamente (seguindo o exemplo do User Guide), mas ao utilizar o driver 'mysqli' o problema ocorre. Esse drive é necessário ao sistema por outros motivos.
Portanto, gostaria de saber como posso trabalhar com o mesmo banco de dados e dois drivers diferentes?
PS.: estou utilizando o exemplo de backup disponível em: http://codeigniter.com/user_guide/database/utilit

gravatar

Tárcio Zemel  em 25 de janeiro de 2012

Você tem que fazer 2 arrays de conexão no seu config/database.php e, na lógica da aplicação, ir alternando conforme a necessidade.

Dê uma olhada no tópico "Connecting to Multiple Databases" da página Connecting to your Database do User Guide.

Att

Comente!