You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

240 lines
5.8 KiB

4 years ago
  1. <?php
  2. /*****************************************************************************
  3. .::. PostgreClass .::.
  4. @Autor: Aldrin Echeverry Higgins -- @Modificado por: Federico A. Ocampo
  5. @Email: aldrin@adanetwork.net -- federico@mcanet.com.ar
  6. @Empresa: Ada Network -- MCAnet
  7. @Descripcion: Una Clase diseniada con los conceptos de POO en PHP.
  8. @Version: 1.1
  9. *****************************************************************************/
  10. class PostgreClass
  11. {
  12. //Atributos Basicos de la clase
  13. var $servidor; //Nombre de la maquina donde se encuentra la BD generalmente es localhost
  14. var $nombreBD; //Nombre de la Base de Datos
  15. var $nombreDeUsuario; //Nombre del usuario autorizado para entrar a la Base de Datos
  16. var $contrasena; //Contraseña del Usuario
  17. //Atributos Modificados
  18. var $enlace;//Almacena el enlace con la Base de Datos una vez establecido
  19. var $resultado;//Almacena el resultado obtenido por la consulta a la BD
  20. var $consulta;//Almacena la consulta realizada con el metodo consultaBD();
  21. var $procesoCorrecto;
  22. //Constructor de la Clase - Inicializa algunos atributos basicos
  23. function PostgreClass($servidor,$nombreBD,$nombreDeUsuario,$contrasena)
  24. {
  25. $this->servidor = $servidor;
  26. $this->nombreBD = $nombreBD;
  27. $this->nombreDeUsuario = $nombreDeUsuario;
  28. $this->contrasena = $contrasena;
  29. }
  30. //---------------Metodos y Procedimientos----------------
  31. //conectarBD(); Te permite conectar y enlazar la BD, el enlace a
  32. //la BD es almacenado modificando el atributo $enlace
  33. function conectarBD()
  34. {
  35. $retConexionExitosa = true;
  36. $this->enlace=pg_connect(" host = ". $this->servidor .
  37. " user = ". $this->nombreDeUsuario .
  38. " password = ". $this->contrasena .
  39. " dbname = ". $this->nombreBD .
  40. " port = 5432");
  41. //Si la conexion fue exitosa
  42. if(!$this->enlace)
  43. {
  44. $retConexionExitosa = false;
  45. }
  46. return $retConexionExitosa;
  47. }
  48. //consultarBD() permite realizar consultas en la BD enlazada
  49. function consultarBD($sentenciaSQL)
  50. {
  51. $retConsultaExitosa = true;
  52. if(!function_exists("pg_query")){
  53. $this->consulta = pg_exec($this->enlace,$sentenciaSQL);
  54. }
  55. else{
  56. $this->consulta = pg_query($this->enlace,$sentenciaSQL);
  57. }
  58. if(!$this->consulta){
  59. $retConsultaExitosa = false;
  60. }
  61. return $retConsultaExitosa;
  62. }
  63. //Devuelve los resultados de una fila dada en forma de arreglo asociativo
  64. function obtenerFilaArray($fila)
  65. {
  66. $this->resultado = pg_fetch_array($this->consulta, $fila);
  67. return $this->resultado;
  68. }
  69. //Devuelve todas las filas del resultados en un arreglo asociativo
  70. function obtenerTotalFilasArray()
  71. {
  72. //Comprueba si en la version de PHP actual existe la funcion pg_fetch_all. Si no usa una implem. propia
  73. if (!function_exists("pg_fetch_all")){
  74. $this->pg_fetch_all_Aux($this->consulta,"assoc");
  75. }
  76. else{
  77. $this->resultado = pg_fetch_all($this->consulta);
  78. }
  79. return $this->resultado;
  80. }
  81. function pg_fetch_all_Aux($res, $kind="assoc")
  82. {
  83. $i = 0; // this is needed for the row integer in the looped pg_fetch_array
  84. $array_out = NULL;
  85. if ($kind == "assoc")
  86. {
  87. while ($row = pg_fetch_array($res, $i, PGSQL_ASSOC))
  88. {
  89. $array_out[] = $row;
  90. $i++;
  91. }
  92. }
  93. else
  94. {
  95. while ($row = pg_fetch_array($res))
  96. {
  97. $array_out[] = $row;
  98. }
  99. }
  100. $this->resultado = $array_out;
  101. return $this->resultado;
  102. }
  103. function obtenerConsulta()
  104. {
  105. return $this->consulta;
  106. }
  107. function insertarRegistro($sentenciaSQL)
  108. {
  109. pg_query($this->enlace,$sentenciaSQL);
  110. }
  111. function cantidadFilasResultado()
  112. {
  113. return pg_numrows($this->consulta);
  114. }
  115. function cantidadCamposResultado()
  116. {
  117. return pg_numfields($this->consulta);
  118. }
  119. //libera el contenido del atributo que almacena las consultas
  120. function liberarConsulta()
  121. {
  122. pg_freeresult($this->consulta);
  123. }
  124. function desconectarBD()
  125. {
  126. pg_close($this->enlace);
  127. }
  128. function Begin_Transaction()
  129. {
  130. $SQL_BEGIN = 'BEGIN;';
  131. $this->procesoCorrecto = true;
  132. $procesoCorrect=$this->conectarBD();
  133. if($procesoCorrect)
  134. {
  135. $procesoCorrect = $this->consultarBD($SQL_BEGIN);
  136. if($procesoCorrect)
  137. {
  138. $ret_datos = $this->obtenerTotalFilasArray();
  139. $this->procesoCorrecto = true;
  140. }
  141. else
  142. $this->procesoCorrecto = false;
  143. $this->liberarConsulta();
  144. $this->desconectarBD();
  145. }
  146. else
  147. $this->procesoCorrecto = false;
  148. return $ret_datos;
  149. }
  150. /**
  151. * Termina un bloque de transaccion
  152. * @return array Retorna un arreglo multidimensional de la forma arreglo[codigo][descrip]
  153. */
  154. function End_Transaction()
  155. {
  156. $SQL_END = 'COMMIT;';
  157. $this->procesoCorrecto = true;
  158. $procesoCorrect=$this->conectarBD();
  159. if($procesoCorrect)
  160. {
  161. $procesoCorrect = $this->consultarBD($SQL_BEGIN);
  162. if($procesoCorrect)
  163. {
  164. $ret_datos = $this->obtenerTotalFilasArray();
  165. $this->procesoCorrecto = true;
  166. }
  167. else
  168. $this->procesoCorrecto = false;
  169. $this->liberarConsulta();
  170. $this->desconectarBD();
  171. }
  172. else
  173. $this->procesoCorrecto = false;
  174. return $ret_datos;
  175. }
  176. /**
  177. * Vuelve atras las operaciones de un bloque de transaccion
  178. * @return array Retorna un arreglo multidimensional de la forma arreglo[codigo][descrip]
  179. */
  180. function Rollback_Transaction()
  181. {
  182. $SQL_END = 'ROLLBACK;';
  183. $this->procesoCorrecto = true;
  184. $procesoCorrect=$this->conectarBD();
  185. if($procesoCorrect)
  186. {
  187. $procesoCorrect = $this->consultarBD($SQL_BEGIN);
  188. if($procesoCorrect)
  189. {
  190. $ret_datos = $this->obtenerTotalFilasArray();
  191. $this->procesoCorrecto = true;
  192. }
  193. else
  194. $this->procesoCorrecto = false;
  195. $this->liberarConsulta();
  196. $this->desconectarBD();
  197. }
  198. else
  199. $this->procesoCorrecto = false;
  200. return $ret_datos;
  201. }
  202. }//Fin de la Clase PostgreClass
  203. ?>