você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

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