Acessando banco de dados usando PHP e ADODB 
Escrito por Fabio Centenaro • Nov 2nd, 2007 • Categoria: PHP, Programação
O PHP oferece poderosos recursos nativos para acesso e manipulação de dados. Umas das dificuldades enfrentadas no dia-a-dia é quando precisamos fazer uma aplicação conversar com dois ou mais servidores de banco de dados. Por exemplo, quando uma aplicação precisa rodar tanto em mysql quanto em PostgreSQL
No PHP, para acessar o mysql usamos a função mysql_connect. Já para o PostgreSQL, a função pg_sql. E assim funciona para todos os comandos de operação com os bancos de dados, sempre utilizando o tipo do banco como prefixo.
Na hora de migrar de um banco para outro, a manutenção do sistema fica grande e dispendiosa. E fazer ifs para testar o banco que está sendo utilizado a cada operação é ainda pior, pois se um dia alguém resolver usar outro banco, a desgraça está instalada.
Podemos resolver este problema utilizando a biblioteca ADODB, responsável pela abstração do banco de dados. Com ela, além de facilitar, e muito, a manipulação dos dados, ainda temos a possibilidade de ter um sistema que suporta a maioria dos bancos de dados existentes no mercado com pouca ou nenhuma alteração no código da aplicação.
O download da biblioteca pode ser feito no seguinte endereço: http://adodb.sourceforge.net/#download
Conectando com o banco de dados
Efetuar a conexão com o banco de dados é muito simples. Basta utilizar o código abaixo:
include_once(”adodb/adodb.inc.php”);
$driver = “mysql”;$db = ADONewConnection($driver);
$db->Connect($server, $username, $password, $database);
Chamamoso método Connect do objeto $db e passamos como parâmetros as informações do banco de dados, como segue: IP ou nome do servidor, nome de usuário, senha e nome do banco de dados.
A variável $driver armazena o nome do driver de banco de dados que será usado. Confira os principais drivers disponíveis:
ado_access – Acesso para Microsoft Access usando OLEDB
ado_mssql – Acesso para o Microsoft SQL Server usando OLEDB
ibase – Acesso para o Interbase
mssql – Acesso ao SQL Server usando drivers nativos do PHP
mysql – Acesso ao mySQL
oci8 – Acesso ao Oracle
postgres7 – Acesso ao Postgresql com as funcionalidades da versão 7
postgres8 – Acesso ao Postgresql com as funcionalidades da versão 8
sybase – Acesso ao Sybase
Manipulando dados
Como qualquer finalidade de um banco de dados é podermos manipular os dados, seja inserindo, alterando, excluindo ou recuperando informações, a biblioteca ADODB possui recursos que facilitam e agilizam estes processos.
Inserindo, alterando e excluindo
Executar expressões SQL não poderia ser mais fácil: basta chamar o método execute do objeto de conexão e voilá, estamos executando nossos comandos. Alguns exemplos:
$db->execute(”INSERT INTO TABELA (CAMPO1, CAMPO2) VALUES (1,2)”);
$db->execute(”UPDATE TABELA SET CAMPO2 = 1 WHERE CAMPO1 = 0″);
$db->execute(”DELETE FROM TABELA WHERE CAMPO1 = 2″);
Simples, não?
Buscando dados
Uma outra função muito usada é a de buscar os dados que estão armazenados, os famosos selects. Pois bem, isso também não é tarefa difícil. Vamos ao exemplo:
$rs = $db->execute(”SELECT * FROM TABELA”);
Note que usamos o mesmo método execute, porém quando executamos um comando select a biblioteca nos retorna um conjunto de dados na variável $db. E é através dessa variável que iremos acessar os dados.
Usando a propriedade fields temos acesso a todos os campos retornados pelo nosso select. Podemos informar o índice ou mesmo o nome do campo, como vemos a seguir:
$variavel = $rs->fields[0];
echo $rs->fields["campo1"];
Novamente vemos como é simples!
Para varrer todos os registros retornados, ou seja, fazer um loop pelos dados, usamos a seguinte estrutura:
while (! $rs->EOF)
{
//comandos a serem executados. Ex: echo $rs->fields["nome"];
$rs->movenext();
}
Pronto, dessa forma percorremos todo o recordset e imprimimos na página o campo nome que foi retornado da consulta.
Mas o SQL Server tem que ser diferente!
É verdade. Quando estamos trabalhando com o SQL Server, algumas coisas funcionam um pouco diferente. A principal mudança é que ao invés de usarmos colchetes – [] – para acessar os campos da coleção fields, mas sim parênteses – ().
Então, com o SQL Server fazemos da seguinte maneira:
echo $rs->fields(”campo1″);
Com isso cai por terra a possibilidade de acessar qualquer tipo de banco de dados sem alteração de código.
Para tudo existe uma solução!
Sim, nem tudo está perdido! Mesmo que o SQL Server trabalhe de forma diferente, ainda existe uma maneira de resolver este problema: o objeto recordset possui um método chamado FetchObject que retorna um objeto cujos atributos são os próprios campos do banco de dados. E o melhor de tudo, ele funciona com qualquer banco.
O único detalhe é que os nomes dos campos devem ser escritos em maiúsculo.
Então vamos ver como fica o código:
$obj = $rs->FetchObject();
echo $obj->CAMPO1;
Dentro de um laço usamos da seguinte forma:
$while (! $rs->EOF)
{
$obj = $rs->FetchObject();
echo $obj->CAMPO1;
$rs->movenext();
}
Concluindo
Fica fácil notar o quanto utilizar uma biblioteca como essa, além da excelente portabilidade, pode agilizar o desenvolvimento de uma aplicação. A ADODB é um must-have em qualquer site ou sistema desenvolvido em PHP. Consultando o manual da biblioteca é possível expandir ainda mais o leque de recursos que ela proporciona. Não deixe de conferir!
Compartilhe:


Prezado Fábio,
Muito boa sua breve introdução sobre o uso do ADODB para PHP.
Porém gostaria de um exemplo de como acessar as propriedades dos campos das Tabelas resultantes de um SELECT, como: nome do campo, tamanho do campo, tipo de campo, etc…
Vamos tomar o exemplo que você mostrou acima no select “$rs = $db->execute(”SELECT * FROM TABELA”);”.
Como usei um “*”, não sei a estrutura, nem o conteúdo trazido, portanto se eu quizesse saber o Número de Campos, seus nomes, seus tamanhos e tipos de dados, como poderia fazê-lo ?
Att.
Rui E. G. de Oliveira
Rui,
Para fazer o que você deseja, o Adodb expõe duas propriedades chamadas FieldCount e FetchField. FieldCount retorna o número de campos (colunas) dentro do Recordset e FetchField retorna um objeto com pelo menos três propriedades: nome, tipo e tamanho. Então basta percorrer os campos do recordset e obter a informação de cada coluna. Seria algo do tipo:
for (i = 0; i < $rs->FieldCount -1; i++ )
{
$obj = $rs->FetchField(i);
echo $obj->name . ” – ” . $obj->type . ” – ” . $obj->max_length;
}
Fabio estou com o mesmo problema do Rui, minha conexao esta funcionando mas não consigo carregar as variáveis do banco nos input’s text’s…vc poderia me ajudar..tentei fazer o for que vc postou aí mas não funcionou, gostaria de saber onde o insiro
Fabio. Vc já usou ele com MsSql? Nosso sistema utiliza a extensao mssql do php. Alterei para utilizar o adodb, porém, ficou muito lento. Tentei utilizar a extensao do adodb para testar mas ocorre um erro ao subir o módulo e nao carrega. Tens alguma dica pro teu amigo?
Leonard,
Cara, já usei, sim. Funcionou bem, a performance ficou boa, não notei nenhuma diferença gritante. Se precisar de uma ajuda, pode me passar por e-mail.
Abração!
Boa noite,
Pessoal, veja se alguém pode mim ajudar, sou iniciante em programação php, estou procurando um editor que seja mais funcional, hoje uso o Dreamweaver, acho ele um pouco pesado, alguém tem alguma dica.
Gilberto
http:/www.10brasil.com.br