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.