ADOdb – Conectando banco de dados em PHP
ADOdb é uma biblioteca de abstração para comunicação com banco de dados em linguagem PHP. Existe também uma versão para Python caso seja do seu interesse, visite o site do projeto em http://adodb.sourceforge.net/, mas neste artigo abordarei apenas a verão em PHP.
A ADOdbPHP é uma biblioteca para conexões em banco de dados, e ela tem suporte a inúmeros bancos como por exemplo: MySQL, PostgreSQL, Interbase, Firebird, Informix, Oracle, MS SQL, Foxpro, Access e também com LDAP. No site do projeto você pode obter a lista completa de banco de dados suportados.
Muitas aplicações, comerciais, não comerciais e softwares livres se beneficiam desta biblioteca e a utilizam, como o caso do Joomla – www.joomla.org.
Dentre as características dessa biblioteca, podemos destacar:
- Velocidade – É a mais rápida biblioteca de código livre.
- Portabilidade
- Suporte a inúmeros bancos de dados
- Fácil utilização
A ADOdb foi portado para ter suporte ao PHP5, mas se você ainda estiver trabalhando com PHP4, pode utilizá-la sem problemas.
Mas porque utilizar uma biblioteca se eu consigo me comunicar com o banco de dados usando as próprias funções do PHP? Ora, como falei acima, essa é uma biblioteca de abstração, então o fato de utilizar ela é para simplificar sua aplicação de forma que você não necessite utilizar todos aqueles comandos para conseguir uma conexão, e mais, imagine que em determinado momento de maturidade de sua aplicação, você deseje mudar de banco de dados! Imagine a dor de cabeça em ter que modificar toda sua aplicação. Com o ADOdb isso não seria tão doloroso, e se você tiver cuidado em criar suas SQLs, muito provavelmente terá que modificar apenas a string que indica qual banco você utilizará.
Agora, mãos a obra, vamos ver como funciona essa biblioteca. Primeiro você deve baixar os fontes através do link http://adodb.sourceforge.net/ . No prórpio site você encontra inúmeros exemplos e uma ótima documentação (em inglês) sobre como utilizá-la.
Depois de baixá-la, descompacte-a em algum diretório junto à sua aplicação. É de costume dos desenvolvedores que se tenha um diretório exclusivo para armazenar bibliotecas externas, como por exemplo /lib, ou /include dentro da estrutura de diretórios. Após descompactar o fonte do ADOdb, aqui iremos supor a seguinte estrutura de diretórios em nossa aplicação:
- /lib –> que é nosso diretório de bibliotecas
- /lib/adodb –> nosso diretório do ADOdb
Agora vamos criar um arquivo chamado exemplo1.php e dentro dele o seguinte fonte:
require_once( “lib/adodb/adodb.inc.php” ); $conexao = NewADOConnection( “mysql” ); $conexao->Connect( “localhost”, “usuario”, “senha”, “meu_banco” );
Acima nós incluimos a biblioteca no arquivo .php para sua utilização, logo após criamos um objeto de conexão informando que utilizaremos o banco MySQL – Lembrando que você poderia utilizar qualquer um dos outros bancos suportados pelo ADOdb, bastando apenas informar ali o banco a ser utilizado, por exemplo postgresql – E ao final executamos a conexão.
Agora, editando novamente o arquivo, vamos incluir:
require_once( “lib/adodb/adodb.inc.php” ); $conexao = NewADOConnection( “mysql” ); $conexao->Connect( “localhost”, “usuario”, “senha”, “meu_banco” ); // Executando uma query $query = “ SELECT nome, franquia FROM contratos ”; $result = $conexao->Execute( $query ); // Imprimindo while( ! $result->EOF ) { echo “Contrato: “, $result->fields[“nome”]; echo “Franquia: “, $result->fields[“franquia”]; $result->MoveNext(); } // Fecha a conexão com o banco $result->close();
Explicando o que fizemos, nesse segundo código nós adicionamos uma consulta a uma tabela chamada contratos. É retornado um objeto com os registros afetados pela SQL.
Depois nós utilizamos um laço while para imprimir os dados na tela, a variável EOF do objeto é um booleano que informa o final do retorno, ou seja, quando você acessar o último registro afetado pela query essa variável irá conter o valor TRUE, e em qualquer outro momento ela conterá FALSE, por isso a negação dela na condicional do laço.
Dentro do laço nós temos dois echo, que imprimem os campos nome e franquia e a execução do método MoveNext(), ATENÇÃO, muita ATENÇÃO, se você esquecer de executar esse método dentro do laço, ele se tornará um loop infinito, pois é esse método que avança o ponteiro até chegar ao final (que mudará o valor da variável EOF para TRUE).
Agora, imagine que você precisa fornecer cláusulas para a query, você pode deixar para o ADOdb cuidar disso pra você, vejamos um exemplo de como fazer isso:
$query = “SELECT nome, franquia FROM contratos WHERE id=? AND franquia > ?”; $result = $conexao->Execute( $query, array($id, $franquia) );
Este exemplo é praticamente o mesmo anterior, só que agora antes de mandar query para o MySQL, ele substituirá todos os “?” da string SQL, pelos seus respectivos parâmetros informados no array.
Outro recurso interessante dessa biblioteca, é o modo Debug. Para ativar o modo Debug basta você informar o valor TRUE para a variável debug do objeto de conexão, faça isso depois da chamada do método Connect(), para nosso exemplo ficaria assim:
$conexao->debug = true;
Agora qualquer query que seja passada irá ser impressa na tela. Claro que isso se torna incomodo, e caso você deseje apenas capturar a mensagem de erro, utilize o método ErrorMsg(). Adaptando novamente nosso código, ficaria assim:
require_once( “lib/adodb/adodb.inc.php” ); $conexao = NewADOConnection( “mysql” ); $conexao->Connect( “localhost”, “usuario”, “senha”, “meu_banco” ); // $conexao->debug = true // Executando uma query $query = “SELECT nome, franquia FROM contratos WHERE id=? AND franquia > ?”; $result = $conexao->Execute( $query, array($id, $franquia) ); if( ! $result ) echo $conexao->ErrorMsg(); else { // Imprimindo while( ! $result->EOF ) { echo “Contrato: “, $result->fields[“nome”]; echo “Franquia: “, $result->fields[“franquia”]; $result->MoveNext(); } } // Fecha a conexão com o banco $result->close();
Nesse último exemplo, caso ocorra um erro(variável $result igual a false) será impresso a mensagem de erro na tela. Uma dica: você pode por exemplo aproveitar esse recurso para criar um sistema de logs em sua aplicação.
Bem, até agora nós fizemos tudo isso em apenas um arquivo .php, mas claro que em uma aplicação de verdade, nós iremos ter vários arquivos e criar uma conexão, instânciando a classe, e repassando todos os dados de username, password, etc, ficaria muito chato, certo?!
Para solucionar isso você pode criar uma função que conecte e retorne o objeto de conexão, vejamos um exemplo (imagine um aquivo /lib/database.php)
require_once( “lib/adodb/adodb.inc.php” ); function &minha_conexao() { $conexao = &NewADOConnection( “mysql” ); $conexao->Connect( “localhost”, “usuario”, “senha”, “meu_banco” ); return $conexao; }
Pronto, agora é só incluir o arquivo database.php nos seus arquivos .php e chamar essa função para gerar a conexão.
Ah, não se esqueça de fechar as conexões depois de utilizá-las
Bem pessoal, é isso ae, caso deseje, obter mais informações, procurem a documetação no site oficial http://adodb.sourceforge.net/ . A ADOdb possui outros inúmeros recursos como paginação, geração automática de dropdowns, geração automática de UPDATEs e INSERTs, vale a pena a consulta.
Almir Mendes de Araújo
Analista de Sistemas e Desenvolvedor
Gostei muito do artigo Almir, bem explicado e muito útil, ficarei no aguardo de outros. Abraço!
Valeu Gabriel, em breve publicarei outra opção que se assemelha muito ao ADOdbPHP, que está incluso no próprio PHP, que é o PDO.
Farei isso ainda essa semana, se tudo correr bem.
Opa legal Almir!! vi uma explicação bem breve sobre PDO em uma palestra e fiquei muito interessado, então estamos no aguardo! abraços!
Pois é amigo, já está quase pronto, passando essa semana eu publico ela aqui para vocês. Aproveitando, se tiverem sugestões, podem mandar.