Devido à enorme dificuldade que eu tive pra conseguir fazer um sistema de validação de XML pra atender as regras da ANS, e gravar LOG dessas informações no Oracle utilizando PHP resolvi tentar ajudar outra pessoas, que por vezes desistiram de utilizar o Oracle ou também tem dificuldades.
Antes de entrar nos detalhes da classe de conexão com o BD Oracle, gostaria de agradecer ao colega Carlos Silva, que publicou um artigo aqui mesmo na Revista PHP sobre:
Configurando o PHP para usar com o Oracle -
http://www.revistaphp.com.br/artigo.php?id=1
Bem, o primeiro passo foi configurar o PHP para acessar o Oracle, feito isto a próxima pergunta é... como conecto no banco para fazer minhas consultas?
Para isto eu achei um artigo muito legal do Emerson Plácido, http://forum.imasters.uol.com.br/index.php?showtopic=276521, e fiz as minhas adaptações para o meu sistema.
Muitas pessoas costumas fazer um único método para o SELECT e um para UPDATE, DELETE e INSERT, entretanto eu prefiro criar um método para cada um deles. Pois em alguns casos é interessante ter variáveis já predefinias para cada um deles.
Ex:
SQL_Oracle.class.php
<?php
/**
* Description of SQL_Oracle
*
* @author Diego Campos
*/
class SQL_Oracle
{s
private $ora_servidor; // Servidor Oracle
private $ora_user; // Usuario do banco
private $ora_senha; // Senha do banco
private $ora_conecta; //identificador de conexão
public $resultado;
//Variaveis do método Select
public $Select;
public $ErroSelect;
//Variaveis do método deletar
public $Delete;
public $ConfirmaDelete;
public $ErroDelete;
//Variaveis do método Inserir
public $Insert;
public $ConfirmaInsert;
public $ErroInsert;
//Variaveis do método Update
public $Update;
public $ConfirmaUpdate;
public $ErroUpdate;ar com Oracle.
//Construtor
function __construct()
{
//Define os dados de conexão ao banco de dados
$this->ora_servidor = “meu servidor ex: bdteste”
$this->ora_user = “minha usuario”
$this->ora_senha = “minha senha”;
}
//Conecta ao Bando de Dados
public function Conectar()
{
$this->ora_conecta = ocilogon($this->ora_user,$this->ora_senha,$this->ora_servidor);
if(!$this->ora_conecta) {
echo "<p>Não foi possível conectar-se ao servidor Oracle.</p>\n" .
"<p><strong>Erro Oracle: " . OCIError() . "</strong></p>\n";
}
}
//Selecionar dados
public function Select()
{
try
{
//OCIParse análisa a ”consulta” (identificador de conexão, meuSQL)
$this->resultado = OCIParse($this->ora_conecta, $this->Select);
if(OCIExecute($this->resultado))
{
return $this->resultado;
}
else
{
$erro_select = ("<p>Erro Oracle: " . OCIError() . "</p>");
throw new Exception($erro_select); //Msg de Erro
}
}
catch (Exception $excecao)
{
//Exibe a msg de erro
echo $excecao->
getMessage();
}
}
//Deletar dados
public function Deletar()
{
//Tenta Deletar, senão exibe msg de erro personalizada
try
{
$this->resultado = OCIParse($this->ora_conecta, $this->Delete);
if(OCIExecute($this->resultado))
{
return $this->resultado;
}
else
{
//$this->ErroDelete = ("<p>Erro Oracle: " . OCIError() . "</p>");
throw new Exception($this->ErroDelete); //Msg de Erro
}
}
catch (Exception $excecao)
{
echo $excecao->
getMessage();
}
}
//Inserir dados
public function Inserir()
{
//Tenta Inserir, senão exibe msg de erro personalizada
try
{
$this->Insert;
$this->ora_conecta;
$this->resultado = OCIParse($this->ora_conecta, $this->Insert);
if(OCIExecute($this->resultado))
{
return $this->resultado;
}
else
{
$this->ErroInsert = ("<p>Erro Oracle: " . OCIError() . "</p>");
//throw new Exception($this->ErroInsert); //Msg de Erro
}
}
catch (Exception $excecao)
{
echo $excecao->
getMessage();
}
}
//Atualziar dados
public function Update()
{
//Tenta Inserir, senão exibe msg de erro personalizada
try
{
$this->resultado = OCIParse($this->ora_conecta, $this->Update);
if(OCIExecute($this->resultado))
{
return $this->resultado;
}
else
{
//$this->ErroUpdate = ("<p>Erro Oracle: " . OCIError() . "</p>");
throw new Exception($this->ErroUpdate); //Msg de Erro
}
}
catch (Exception $excecao)
{
echo $excecao->
getMessage();
}
}
//Desconecta do banco de dados
public function Desconectar()
{
return ocilogoff($this->ora_conecta);
}
?>
Agora um exemplo simples de como utilizar a classe:
<?php
/**
* Description of ConsultaCliente
*
* @author Diego Campos
*/
require_once("SQL_Oracle.class.php");
Class ConsultaCliente
{
function __construct()
{
/* */
}
private function Consulta()
{
$id = $_GET["id"];
$SQL_Oracle = new SQL_Oracle;
$SQL_Oracle->Conectar();
//Monta a query para verificar a quantidade de resultados
$SQL_Oracle->Select = "SELECT COUNT(ID) AS LINHAS ".
"FROM cliente ";
//Executa a query
$SQL_Oracle->Select();
OCIFetch($SQL_Oracle->resultado);
$total = OCIResult($SQL_Oracle->resultado,'LINHAS');
if($total>0)
{
//Monta a query com os resultados
$SQL_Oracle->Select = "SELECT ID, NOME ".
"FROM cliente ".
"WHERE ID='$id' ".
"ORDER BY NUMLOTE desc";
//Executa a query
$SQL_Oracle->Select();
//Exibe os resultados
while (OCIFetch($SQL_Oracle->resultado))
{
OCIResult($SQL_Oracle->resultado,'NOME');
}
}
}
}
?>
Se você leu e não entendeu o porquê de utilizar um “select COUNT(id)” antes de fazer o Select definitivo, de uma olhada no tópico “Número de registros de uma consulta” que se encontra nesse link: http://www.raelcunha.com/oracle.php#num_row
Provavelmente não fiz tudo da forma mais elegante possível, mas pra quem ainda esta apredendo a programar em POO acho que foi proveitoso.
Ainda não tive tempo de terminar o livro que comprei: “PHP – Programando com Orientação a Objetos”, mas num futuro próximo pretendo explicar com mais detalhes e de uma forma mais “correta”.
Até a próxima