você está aqui: Home  → Arquivo de Mensagens

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

 

 

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