De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
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.
<? /** * 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 ?>
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários