Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Zura! - Busque. Compare. Compre.

Outras ofertas

Notebook

Monitor

Impressora

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

Classe PHP5 genérica para trabalhar com tabelas

Colaboração: Elton Luís Minetto

Data de Publicação: 29 de Abril de 2006

Algumas semanas atrás comecei a bolar uma classe para trabalhar com tabelas de bancos de dados para usar como exemplo em um curso de PHP Avançado que estou ministrando. A classe ficou útil, tanto que estou utilizando em alguns novos projetos que estou começando. Estou disponibilizando aqui o código. Pode ser útil para mais alguém.

Código da classe

  <?  /**
    * Classe generica para trabalhar com tabelas * Elton Luís Minetto <eminetto
    at gmail dot com> * Licença: GPL */
  
  include("adodb/adodb.inc.php"); //a classe depende do adodb
  include("adodb/adodb-exceptions.inc.php");
  
  class tabela {
      /** * nome da tabela * @var string */ protected $tabela;
  
      /** * conexao com a base de dados * @var string */ protected $db;
  
  
      /** * array com os dados usados para resultado * @var string[] */
      public $dados_result;
  
      /** * array com os dados usados para insert e update * @var string[] */
      public $dados_dml;
  
      /** * array usado pelo adodb para pegar os resultados das consultas *
      @var string */ public $result;
  
      /** * Construtor da classe * @param string $tabela O nome da tabela *
      @return void */ public function __construct($tabela) {
          $this->tabela = $tabela; try {
              $this->db = NewADOConnection(app::$db_string);
          } catch (Exception $e) {
              echo "Erro na conexao:".$e->getMessage();
          } $this->dados_result = array(); $this->dados_dml = array();
      }
  
      /** * Funcao que monta a consulta sql para a busca dos dados * @param
      string[] $campos Array com o nome dos campos a serem buscados * @param
      string $where Parametros SQL para a pesquisa * @return void */ public
      function get($campos,$where=null) {
          //monta o sql $sql = "select "; $sql .= implode(",",$campos); $sql .=
          " from ".$this->tabela; if($where) {
              $sql .= " where ".$where;
          } try {
              $this->result = $this->db->Execute($sql);
          } catch (Exception $e) {
              echo "Erro na
              pesquisa:<br>Erro:".$e->getMessage().'<br>SQL:'.$sql.'<br><a
              href="javascript:history.go(-1)">Voltar</a>';
          }
      }
  
      /** * Funcao que retorna um valor booleano indicando se ainda existem
      resultados * @return bool */ public function result() {
          try {
              if($this->dados_result =
              @array_change_key_case($this->result->FetchRow(), CASE_LOWER)){
              //recebe o array resultante e converte as chaves para minusculo
                  return true;
              } else {
                  return false;
              }
          } catch (Exception $e)    {
              echo $e->getMessage();
          }
      }
  
      /** * Funcao que faz o insert dos dados na tabela * @return void */
      public function insert() {
          $this->db->BeginTrans( ); $sql = "insert into ".$this->tabela."(";
          $sql .= implode(",",array_keys($this->dados_dml)); $sql .= ") values
          ("; $sql .= implode(",",$this->dados_dml); $sql .= ')'; try {
              $this->result = $this->db->Execute($sql); $this->dados_dml =
              array();
          } catch (Exception $e) {
              echo 'Erro na insercao:'.$e->getMessage().'<br><a
              href="javascript:history.go(-1)">Voltar</a>'; exit;
          }
  
      } /** * Funcao que faz o update dos dados na tabela * @param string
      $where Parametros SQL para a alteracao * @return void */ public function
      update($where) {
          $this->db->BeginTrans( ); $sql = "update ".$this->tabela." set ";
          foreach($this->dados_dml  as $campo => $valor) {
              $sql .= "$campo = $valor,";
          } $sql = substr($sql,0,strlen($sql)-1);//remove a ultima virgula
          $where = stripslashes($where); $sql .= " where $where"; try {
              $this->result = $this->db->Execute($sql); unset($this->dados_dml);
          } catch (Exception $e) {
              echo "Erro na
              atualiza��o:<br>SQL:".$sql.'<br>Erro:'.$e->getMessage().'<br><a
              href="javascript:history.go(-1)">Voltar</a>'; exit;
          }
      }
  
      /** * Funcao que faz a exclusao dos dados na tabela * @param string
      $where Parametros SQL para a exclusao * @return void */ public function
      delete($where=null) {
          $this->db->BeginTrans( ); $sql = "delete from ".$this->tabela;
          if($where)
              $sql .= " where ".stripslashes($where);
          //echo $sql; try {
              $this->result = $this->db->Execute($sql);
          } catch (Exception $e) {
              echo "Erro na exclusão:".$e->getMessage().'<br><a
              href="javascript:history.go(-1)">Voltar</a>'; exit;
          }
      }
  
      /**
       * Interceptador __set. Quando um valor eh alterado ele eh colocano no
       array de dados * para ser usado em instrucoes DML (insert, update) */
      function __set($name,$value) {
          $this->dados_dml[$name] = "'".$value."'";
      }
  
      /**
       * Inserceptador __get. Quando um valor eh solicitado eh entregue o
       valor * do array de resultados das consultas */
      function __get($name) {
          $name = strtolower($name); if($name != "dados_result")
              return $this->dados_result[$name];
          else
              return $this->dados_result;
      }
  
      /** * Funcao que faz a confirmacao das operacoes * @return void */
      public function save() {
          $this->db->CommitTrans( );
      }
  
      /** * Destrutor da classe * @return void */ public function __destruct() {
          $this->db->close();
      }
  }?>
  
  ===Código da classe de configurações===

<?php //classe de configuracoes class app { static $db_string = "mysql://elton:elton@localhost/elton"; //strings de conexao para outros bancos em http://adodb.sourceforge.net

//demais variaveis de configuracoes podem ser adicionadas nesta classe } ?>

Exemplo de uso da classe

<?php include("app.php"); //classe de configuracoes include("tabela.php");

$tab = new tabela("pessoa"); //pessoa eh o nome da tabela /*inserindo dados */ $tab->codpes = 2; $tab->nompes = 'elton luis minetto'; $tab->insert(); $tab->save();//realiza o commit

/* selecionando dados*/ $tab->get(array("*")); while($tab->result()) { echo $tab->codpes."-".$tab->nompes."<br>"; }

/* atualizando dados */ $tab->nompes = 'Elton Luis Minetto'; $tab->update("codpes = 2"); $tab->save();

/* excluindo dados */ $tab->delete("codpes = 2"); $tab->save(); unset($tab);//é executado o destrutor ?>


Veja a relação completa dos artigos de Elton Luís Minetto

Stumble Upon Digg This Del.icio.us Twitter Recomendar este artigo a um amigo Entre em contato Formato PDF
Newsfeed RSS
Formato para impressão
StumbleUpon Digg Del.icio.us Twitter Recomendar Contato PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 3.08/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.1 /5 (943 votos)

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script
Twitter, Chiclete e Camisinha


Encontre imóveis, apartamentos e casas a venda no Imobilien
Saiba mais

Grupo MBS