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
Referências Adicionais
Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.
Avalie esta dica
Opinião dos Leitores
05 Fev 2007, 22:34
Da pra incrementar esta idéia e chegar a um negocio tipo os componentes do delphi











