Ver Mensaje Individual
  #2 (permalink)  
Antiguo 22/03/2013, 13:09
Avatar de h2swider
h2swider
 
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 9 meses
Puntos: 194
Respuesta: Conectar PHP con BD Oracle

Código PHP:
Ver original
  1. <?php
  2.  
  3. /**
  4.  * Clase de conexion
  5.  * Implementada con patron de diseño singleton
  6.  *
  7.  * @author leswider
  8.  */
  9. class Conexion {
  10.  
  11.     private $_oLinkId; //objeto resource que indicara si se ha conectado
  12.     private $_sServidor;
  13.     private $_sNombreBD;
  14.     private $_sUsuario;
  15.     private $_sClave;
  16.     private $_sPuerto;
  17.     public static $sMensaje;
  18.     private static $_oSelf = null; //Almacenara un objeto de tipo Conexion
  19.  
  20.     /**
  21.      *
  22.      * @param string Nombre del usuario a conectarse.
  23.      * @param string Password de conexión.
  24.      * @param string Nombre de la base de datos.
  25.      * @param string Nombre del servidor.
  26.      */
  27.  
  28.     private function __construct() {
  29.        
  30.         $this->_sServidor = '10.x.x.x';
  31.         $this->_sNombreBD = 'BASE11G';
  32.         $this->_sUsuario = 'LUCAS';
  33.         $this->_sClave = 'holamundo';
  34.         $this->_sPuerto = '1534';
  35.     }
  36.  
  37.     /**
  38.      * Este es el pseudo constructor singleton
  39.      * Comprueba si la variable privada $_oSelf tiene un objeto
  40.      * de esta misma clase, si no lo tiene lo crea y lo guarda
  41.      * @static
  42.      * @return resource
  43.      */
  44.     public static function getInstancia() {
  45.  
  46.         if (!self::$_oSelf instanceof self) {
  47.             $instancia = new self(); //new self ejecuta __construct()
  48.             self::$_oSelf = $instancia;
  49.             if (!is_resource($instancia->conectar())) {
  50.                 self::$_oSelf = null;
  51.             }
  52.         }
  53.         $conex = self::$_oSelf;
  54.         return $conex->_oLinkId; //Se devuelve el link a la conexion
  55.     }
  56.  
  57.     /**
  58.      * Realiza la conexion
  59.      * @return link para exito, o false
  60.      */
  61.     private function conectar() {
  62.  
  63.         $this->_oLinkId = null;
  64.         $intentos = 0;
  65.         while (!is_resource($this->_oLinkId) && $intentos < 20) {
  66.             $intentos++;
  67.             $this->_oLinkId =
  68.                     oci_connect($this->_sUsuario, $this->_sClave, "(DESCRIPTION = (LOAD_BALANCE = yes)
  69.                            (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = {$this->_sServidor}) (PORT = 1534) ) )
  70.                            (CONNECT_DATA = (FAILOVER_MODE = (TYPE = select) (METHOD = basic) (RETRIES = 180) (DELAY = 5) )
  71.                            (SERVICE_NAME = {$this->_sNombreBD}) ) )");
  72.         }
  73.  
  74.         if (is_resource($this->_oLinkId)) {
  75.             self::$sMensaje = "Conexion exitosa!<br/>";
  76.         } else {
  77.             self::$sMensaje = "ERROR: No se puede conectar a la base de datos..!<br/>";
  78.         }
  79.         echo self::$sMensaje;
  80.         return $this->_oLinkId;
  81.     }
  82.  
  83.     /**
  84.      * Este método verifica si había una conexión abierta anteriormenete. Si había la cierra.
  85.      *
  86.      * @static
  87.      * @return boolean true si existía la conexión, false si no existía.
  88.      */
  89.     public static function desconectar() {
  90.  
  91.         $conexion_activa = false;
  92.         if (self::$_oSelf instanceof self) {
  93.             $bandera = true;
  94.             $instancia = self::$_oSelf;
  95.             oci_close($instancia->_oLinkId); //cierro la conexion activa
  96.             self::$_oSelf = null; //destruyo el objeto
  97.         }
  98.         return $conexion_activa;
  99.     }
  100.  
  101. }
  102.  
  103. ?>

Código PHP:
Ver original
  1. $sql = "select 1 from dual" ;
  2.                
  3. $conex = Conexion::getInstancia();
  4. $stid = oci_parse($conex, $sql);
  5. oci_execute($stid);
  6.  
  7. $foo= array();
  8. while ($row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_NULLS)) {
  9.  
  10.      $foo[] = $row;
  11. }
  12.  
  13. var_dump($foo);
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives