Uma introdução à classe ADODB

Geralmente nos enganamos ao desenvolver uma aplicação sem pensar no futuro. Não é impossível que o banco de dados que você usa hoje torne-se inviável no futuro e você precise reescrever sua aplicação para utilizar outro banco. É justamente aí que usar uma classe bem desenhada para bancos de dados faz toda a diferença.

[ Hits: 79.182 ]

Por: Pedro César em 01/02/2004


Manipulando os resultados



Estas são as questões mais comuns dos desenvolvedores com muitos registros. ADODB facilmente responde a isso com as funções RECORDCOUNT() e ROWCOUNT(), que são sinônimos.

... linha a ser aplicada no exemplo anterior:

print $rs->RecordCount()." linhas retornadas "; //mostra a quantidade de linhas do resultado da pesquisa

Provavelmente a segunda questão na lista das mais comuns é o número de campos do resultado, ADODB responde a isso com a função FIELDCOUNT().

... linha a ser aplicada no exemplo anterior:

print $rs->RecordFieldCount()." Campos retornados "; //mostra a quantidade de campos do resultado da pesquisa

Limitando os resultados


Nós já discutimos o quanto a biblioteca torna suas aplicações mais portáveis. Eu já tive uma experiência particular dolorosa de migração do MySQL para o Informix uma vez, principalmente referente a cláusula LIMIT. Por exemplo, o MySQL permite declarações como "SELECT nome FROM funcionarios LIMIT 15", uma característica muito útil que não tem igual no Informix, que posteriormente veio a ser implementada, de uma maneira igualmente não padronizada, como "SELECT first 15 nome FROM funcionarios". Isto se torna mais um motivo para usar a biblioteca, felizmente ADODB tem um caminho para manipular limites, a função SELECTLIMIT().

$sql="SELECT sobrenome, idade FROM funcionarios";

$rs = $db->SelectLimit($sql,10,100); //seleciona 10 linhas iniciando na linha 100

if (!$rs) {
    print $rs->ErrorMsg(); //mostra mensagem de erro
} // fim do IF
else{
    while (!$rs->EOF) {
        print $rs->fields[0]." ".$rs->fields[1]."<br>";
        //fields[0] é sobrenome e fields[1] é a idade
        $rs->MoveNext(); //Mover para o próximo registro
    } //fim do WHILE
} // fim do ELSE

A função SelectLimit() pega a declaração SQL como primeiro parâmetro, em seguida vem o número de linhas a exibir e por último o OFFSET (a partir de onde exibir).

Note que isso inverte a ordem da cláusula LIMIT do MySQL, o que faz dela muito útil para mostrar resultados em WEB PAGES, com botões de avanço e retrocesso para navegar entre os registros.

Freqüentemente tenho visto códigos que retornam todos os resultados usando o PHP para filtrar. Um poderoso esforço desperdiçado, você pode ainda usar a função CACHE_SELECTLIMIT() para guardar esse tipo de resultado.

Página anterior    

Páginas do artigo
   1. Uma introdução à classe ADODB
   2. Conectando à sua base através de scripts
   3. Selecionando, alterando e inserindo registros
   4. Cacheando suas queries
   5. Manipulando os resultados
Outros artigos deste autor

Uma introdução à biblioteca GD

Utilizando PEAR

Paginação de resultados com a classe ADODB

Dicas simples para dar mais usabilidades aos formulários

Leitura recomendada

PHP com PostgreSQL - Estruturando a conexão

Gallery - Álbum de fotos no seu site

Oracle 9i, Apache e PHP

Sistema PDV com PHP-GTK2 e ACBrMonitor (parte 1)

Executando comandos DML em base de dados MySQL através do Eclipse PHP (Bônus: Temas e Fontes no Eclipse)

  
Comentários
[1] Comentário enviado por fabio em 01/02/2004 - 02:11h

Muito interessante essa classe, com certeza irei experimentá-la em meu próximo projeto. Parabéns!

[2] Comentário enviado por wilbil em 01/02/2004 - 18:31h

acheu muito interessante!

mas ate hoje nunca vi uma classe qua funcionasse os relacionamentos somente selects simples

ja tentou usar inner join do mysql nestas sua classe????

[3] Comentário enviado por tecdom em 01/02/2004 - 20:25h

Nao, mas farei o teste e postarei o resultado.

Obs: Gostaria de deixar claro para todos uma coisa que nao deixei no artigo, que a classe nao e minha. Apenas traduzi um artigo que encontrei na internet . O original encontra-se em: http://www.databasejournal.com/features/mysql/article.php/2222651.
Farei restante da traducao.

[4] Comentário enviado por oalexandrino em 02/02/2004 - 17:18h

"mas ate hoje nunca vi uma classe qua funcionasse os relacionamentos somente selects simples

ja tentou usar inner join do mysql nestas sua classe???? "

Claro, as queries são executadas nas funções nativas PHP daquele banco, acontece que o user nao tem ciência disso...

Utilizo-a e já testei em MySQL, Access e SQL 2000 e o mesmo codigo funciona perfeitamente...talvez seja a classe mais completa desse estilo...

é realmente IMPRESSIONANTE!

[5] Comentário enviado por oalexandrino em 02/02/2004 - 17:21h

Nota...é sempre bom utilizar
"$db -> SetFetchMode(ADODB_FETCH_ASSOC); //retornar array associativo"

pois em SQL Server por exemplo, o array inteiro nao foi acessado, apenas o associativo.. (SQL SErver 2000)

[6] Comentário enviado por fabio em 09/02/2004 - 14:34h

O link correto para download dessa classe é:
http://php.weblogs.com/adodb#downloads

[7] Comentário enviado por fabio em 23/03/2004 - 17:10h

Bom, lá vai uma dica para o uso dessa classe. No PHP temos a função mysql_insert_id(), que retorna o código do último registro inserido no banco de dados. Precisei fazer isso usando a classe ADODB e descobri que ela possui suporte a esse recurso:

$sql = $db->execute("INSERT INTO table (column1, column2) VALUES ('value1', 'value2')");
if(!$sql){
echo "Error performing query: ".$db->ErrorMsg();
} else {
echo "Query success! The new row has an id of: ".$db->Insert_Id();
}

Encontrei essa informação em:
http://www.phpfreaks.com/tutorials/110/2.php
(ADOdb: Making MySQL Efficient)

O artigo do link acima ainda possui muitas outras dicas sobre recursos do MySQL inclusos nessa classe, vale à pena ler :)

[8] Comentário enviado por rockedsonbr em 11/01/2005 - 14:50h

Boa tarde, cara gostaria de saber mais detalhes sobre a classe do AdoDB... pois aqui no teu artigo, vc diz q o adodb suporta conexão com o interbase. Eu baixei o adodb do souceforge, instalei e fiz um texte o resultado foi que ele não conseguiu achar a classe.

Missing file: c:\arquivos de programas\easyphp1-7\www\adodb/drivers/adodb-interbase.inc.php

ADONewConnection: Unable to load database driver ''

obrigado
Rock


Contribuir com comentário