Você está na página 1de 4

PHP + Oracle

Devido enorme dificuldade que eu tive pra conseguir fazer um sistema de validao de XML pra atender as regras da ANS, e gravar LOG dessas informaes no Oracle utilizando PHP resolvi tentar ajudar outra pessoas, que por vezes desistiram de utilizar o Oracle ou tambm tem dificuldades. Antes de entrar nos detalhes da classe de conexo 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 prxima pergunta ... como conecto no banco para fazer minhas consultas? Para isto eu achei um artigo muito legal do Emerson Plcido, http://forum.imasters.uol.com.br/index.php?showtopic=276521, e fiz as minhas adaptaes para o meu sistema. Muitas pessoas costumas fazer um nico mtodo para o SELECT e um para UPDATE, DELETE e INSERT, entretanto eu prefiro criar um mtodo para cada um deles. Pois em alguns casos interessante ter variveis j predefinias para cada um deles. Ex: SQL_Oracle.class.php

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.

<?php /** * Description of SQL_Oracle * * @author Diego Campos */ class SQL_Oracle {s private $ora_servidor; private $ora_user; private $ora_senha; private $ora_conecta; public $resultado;

// Servidor Oracle // Usuario do banco // Senha do banco //identificador de conexo

//Variaveis do mtodo Select public $Select; public $ErroSelect; //Variaveis do mtodo deletar public $Delete; public $ConfirmaDelete; public $ErroDelete; //Variaveis do mtodo Inserir public $Insert; public $ConfirmaInsert; public $ErroInsert; //Variaveis do mtodo Update public $Update; public $ConfirmaUpdate; public $ErroUpdate;ar com Oracle. //Construtor function __construct() { //Define os dados de conexo ao banco de dados $this->ora_servidor = meu servidor ex: bdteste $this->ora_user = minha usuario $this->ora_senha = minha senha; }

44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94.

//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>No foi possvel conectar-se ao servidor Oracle.</p>\n" . "<p><strong>Erro Oracle: " . OCIError() . "</strong></p>\n"; exit(); } } //Selecionar dados public function Select() { try { //OCIParse anlisa a consulta (identificador de conexo, 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, seno 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>"); 95. throw new Exception($this->ErroDelete); //Msg de Erro 96. } 97. } 98. catch (Exception $excecao) 99. { 100. echo $excecao->getMessage(); 101. } 102. } 103. 104. //Inserir dados 105. public function Inserir() 106. { 107. 108. //Tenta Inserir, seno exibe msg de erro personalizada 109. try 110. { 111. $this->Insert;

112. $this->ora_conecta; 113. $this->resultado = OCIParse($this->ora_conecta, $this>Insert); 114. if(OCIExecute($this->resultado)) 115. { 116. return $this->resultado; 117. } 118. else 119. { 120. $this->ErroInsert = ("<p>Erro Oracle: " . OCIError() . "</p>"); 121. //throw new Exception($this->ErroInsert); //Msg de Erro 122. } 123. } 124. catch (Exception $excecao) 125. { 126. echo $excecao->getMessage(); 127. } 128. } 129. 130. //Atualziar dados 131. public function Update() 132. { 133. //Tenta Inserir, seno exibe msg de erro personalizada 134. try 135. { 136. $this->resultado = OCIParse($this->ora_conecta, $this>Update); 137. if(OCIExecute($this->resultado)) 138. { 139. return $this->resultado; 140. } 141. else 142. { 143. //$this->ErroUpdate = ("<p>Erro Oracle: " . OCIError() . "</p>"); 144. throw new Exception($this->ErroUpdate); //Msg de Erro 145. } 146. } 147. catch (Exception $excecao) 148. { 149. echo $excecao->getMessage(); 150. } 151. } 152. 153. //Desconecta do banco de dados 154. public function Desconectar() 155. { 156. return ocilogoff($this->ora_conecta); 157. } 158. ?> Agora um exemplo simples de como utilizar a classe:

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.

<?php /** * Description of ConsultaCliente * * @author Diego Campos */ require_once("SQL_Oracle.class.php"); Class ConsultaCliente { function __construct() { /* */

16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. } 52. 53. ?>

} 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 no entendeu o porqu de utilizar um select COUNT(id) antes de fazer o Select definitivo, de uma olhada no tpico Nmero de registros de uma consulta que se encontra nesse link: http://www.raelcunha.com/oracle.php#num_row Provavelmente no fiz tudo da forma mais elegante possvel, mas pra quem ainda esta apredendo a programar em POO acho que foi proveitoso. Ainda no tive tempo de terminar o livro que comprei: PHP Programando com Orientao a Objetos, mas num futuro prximo pretendo explicar com mais detalhes e de uma forma mais correta. At a prxima

Você também pode gostar