Hoje vou demostrar como criarmos uma classe mãe de multiplos banco de dados e como usarmos ela seja sua própria classe ou em classe que sejam herdeiras suas. hehehe
Bom aqui está o codigo fonte:
Banco.class.php(Classe Pai)
<?php
class Banco {
var $Con;
var $GetCon;
var $DirCon;
var $QueryLista;
var $OracleQueryLista;
var $TotalLista;
var $TotalRegistros;
var $Lista;
var $ExeQuery;
var $ExecQueryOracle;
var $TipoCon = 1;
var $Server = "localhost";
var $Database ="oferta";
var $UserDb = "matheus";
var $PassWDDb = "12345";
var $Erro_db = "Erro ao se conectar ao Banco de Dados.!!";
var $CloseDatabase;
var $DirecHome = "/path/pro/diretorio/do/oracle";
/*# - Construtor da classe - #*/
function Banco() {
$this->ConexaoODBC();
}
/*# - Metodo que conecta oo banco de dados e é chamado pelo Construtor da classe - #*/
function ConexaoODBC(){
switch($this->TipoCon){
//MSSQL (MICROSOFT SQL SERVER)
case 1:
$this->Con = mssql_connect($this->Server,$this->UserDb,$this->PassWDDb) or die($this->Erro_db);
$this->GetCon = mssql_select_db($this->Database,$this->Con);
break;
//MYSQL
case 2:
$this->Con = mysql_connect($this->Server,$this->UserDb,$this->PassWDDb) or die($this->Erro_db);
$this->GetCon = mysql_select_db($this->Database,$this->Con);
break;
//POSTGRESQL
case 3:
$this->Con = pg_connect("dbname=$this->Database port=5432 host=$this->Server user=$this->UserDb password=$this->PassWDDb")
or die($this->Erro_db);
break;
//ORACLE 8I,9I,10G
case 4:
$this->Con = @ocilogon($this->UserDb, $this->PassWDDb, $this->Server)
or die($this->Erro_db);
$this->DirCon = putenv("ORACLE_HOME=".$this->DirecHome."");
$this->GetCon = putenv("ORACLE_SID=".$this->Database."");
break;
}
}
/*# - Executa query de banco - #*/
function ExecDatabase($StringSQL){
switch($this->TipoCon){
case 1:
if($this->ExeQuery = mssql_query($StringSQL, $this->Con)){
return true;
}else{
return false;
}
break;
case 2:
if($this->ExeQuery = mysql_query($StringSQL, $this->Con)){
return true;
}else{
return false;
}
break;
case 3:
if($this->ExeQuery = pg_query($StringSQL, $this->Con)){
return true;
}else{
return false;
}
break;
case 4:
$this->ExecQueryOracle = ociparse($this->Con, $StringSQL);
$this->ExeQuery = ociexecute($this->ExecQueryOracle);
if($this->ExeQuery){
return true;
}else{
return false;
}
break;
}
}
/*# - Monta o objeto completo dos resultados da query - #*/
function ViewDatabase(){
switch($this->TipoCon){
case 1:
if($this->Lista = mssql_fetch_array($this->ExeQuery)){
return TRUE;
}else{
return FALSE;
}
break;
case 2:
if($this->Lista = mysql_fetch_array($this->ExeQuery)){
return TRUE;
}else{
return FALSE;
}
break;
case 3:
if($this->Lista = pg_fetch_array($this->ExeQuery)){
return TRUE;
}else{
return FALSE;
}
break;
case 4:
if($this->Lista = ocifetch($this->ExeQuery )){
return TRUE;
}else{
return FALSE;
}
break;
}
}
/*# - Retorna o total de linhas afetadas - #*/
function TotalNumRegistros(){
switch($this->TipoCon){
case 1:
$this->TotalRegistros = mssql_num_rows($this->ExeQuery);
break;
case 2:
$this->TotalRegistros = mysql_num_rows($this->ExeQuery);
break;
case 3:
$this->TotalRegistros = pg_num_rows($this->ExeQuery);
break;
case 4:
$this->TotalRegistros = ocinumcols($this->ExeQuery);
break;
}
return $this->TotalRegistros;
}
/*# - Fecha conexão com o banco de dados - #*/
function CloseODBC(){
switch($this->TipoCon){
case 1:
$this->CloseDatabase = mssql_close($this->Con);
break;
case 2:
$this->CloseDatabase = mysql_close($this->Con);
break;
case 3:
$this->CloseDatabase = pg_close($this->Con);
break;
case 4:
$this->CloseDatabase = ocilogoff($this->Con);
break;
}
}
/*# - Destrutor da classe - #*/
function __destruct(){
@CloseODBC();
}
}
?>Note que deixei alguns comentários referente ao que significa cada método e seus respectivos atributos, vale lembrar que está classe e altamente editável para seu uso.
note que ao instanciarmos nossa classe Banco, automaticamente seu construtor já faz a conexão baseado no servidor, login, senha e base de dados forncecidos dentro da classe, vale lembrar que estás variáveis que são para sua configuração:
$TipoCon = 1(Tipo de banco. Ex: 1- SQL server; 2- Mysql; 3- PostgreSql e 4- ORACLE);
$Server = "localhost"(Servidor);
$Database ="oferta"(Banco de dados);
$UserDb = "matheus"(Usuário);
$PassWDDb = "12345"(Senha);
Bom vejamos como usar esta classe de um modo simples em uma Seleção de Dados e Uma Inserção.
#teste_simples_selecao.php
<?php
require_once(Banco.class.php)
$ExecDb = new Banco;
if($ExecDb->ExecDatabase("SELECT * FROM CLIENTE")){
while($ExecDb->ViewDatabase()){
echo $ExecDb->Lista['nome'].'<br>';
}
}
unset($ExecDb);
?>
#teste_simples_insercao.php
<?php
require_once(Banco.class.php)
$ExecDb = new Banco;
if($ExecDb->ExecDatabase("INSERT INTO CLIENTE (nome,email) VALUES ('Matheus Biagini','matheus@itcon.com.br')")){
echo "Inserido com sucesso!"
}else{
echo "Houve um erro!";
}
unset($ExecDb);
?>Note que assim que Instanciamos a class Banco ela já faz a conexão com o banco de dados escolhido e assim no metodo ExecDatabase faz a execução da Query retornando verdadeiro ou false, bom assim que usamos o metodo ViewDatabase ele já acessa o atributo do metodo ExecDatabase trazendo nosso objeto populado com dados. Assim que executamos o atributo Lista['<nome do campo da tabela>'] ele já trás os dados.
Bom espero ter ajudado vocês, no meu proximo POST vou ensinar como usar esta classe em outras classe deixando assim um código flexivel e facil de alterar.
Obs: Não sei porque mas coloquei o código inteiro identado mas este forum zonea tudo heheh.
Estou anexando o
codigo_fonte.zip 1.87KB
27 downloads.Abraços a todos.
Qualquer duvida é só postar.
Ah galera ficou identado sim hehhe. Agora que vi.


























