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.180 ]

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


Cacheando suas queries



O banco de dados freqüentemente é culpado pela baixa performance do sistema. Não ter que repetir queries ao banco já é um bom caminho para melhorar o desempenho. Elas podem ser cacheadas guardando páginas inteiras, ou se você assim quer gerar uma página dinâmica, mas quer que somente a query seja guardada, você pode guardar somente os resultados, seja qual for, o ADODB permite que você faça facilmente! Antes, no entanto, de você salvar em cache para melhorar a performance, é aconselhável que você otimize sua query. Alguns índices simples podem fazer toda a diferença.

Agora deixe-me mostrar como ADODB permite que você armazene resultado de queries. Neste exemplo, baseado na query que nós rodamos na última vez, ADODB armazena os resultados em um arquivo em /var/tmp/ADODB_CACHE por 10 minutos após a query ter sido feita pela 1° vez.

include "$adodb_path/db_values.inc.php";
include "$adodb_path/adodb.inc.php";
$db- = NewADOConnection("$database_type");
$db->Connect("$host", "$usuario", "$senha", "$banco");

$ADODB_CACHE_DIR = "/var/tmp/adodb_cache"; //diretório para armazenar arquivos de cache.

$sql = "SELECT sobrenome, idade FROM funcionarios";
$rs = $db->CacheExecute(600, $sql); //executa e guarda os resutlados por 600 segundos.

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 CacheExecute pega dois argumentos:
  • o primeiro é o tempo de vida do cache (em segundos);
  • o segundo é a declaração SQL.
O primeiro é opcional, se você não especificar ele assume o valor padrão de 3600 segundos (1 hora). Os arquivos recebem o nome no seguinte formato: ADODB_*.CACHE e você pode deletá-los com segurança após ter rodado bem o sistema. Você deve adicionar no cron ou no gerenciador de tarefas rotinas para apagar os arquivos de cache expirados.

Note que o parâmetro booleano do PHP MAGIC_QUOTES_RUNTIME deve ser desligado para o cache poder trabalhar. Você pode alterar isso se necessário em tempo de execução adicionando SET_MAGIC_QUOTES_RUNTIME(0) em seu código antes de chamar a classe de banco de dados.

Você pode também limpar o cache a qualquer hora chamando a função CACHE_FLUSH(). Também é recomendado que o parâmetro booleano do PHP REGISTER_GLOBAL seja configurado para OFF por motivos de segurança (padrão nas versões mais recentes do PHP).

Página anterior     Próxima página

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

Paginação de resultados com a classe ADODB

Uma introdução à biblioteca GD

Utilizando PEAR

Dicas simples para dar mais usabilidades aos formulários

Leitura recomendada

PDO - Introdução e conceitos

Servidor Web com Fedora Core 7

Oracle 9i, Apache e PHP

Gallery - Álbum de fotos no seu site

Configurando Apache + MySQL + Manipulação de dados com PHP

  
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