PHP - Clase para Conectar a Oracle

   
Vista:

Clase para Conectar a Oracle

Publicado por oscarm (10 intervenciones) el 31/05/2013 19:26:58
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
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
95
96
97
98
99
100
101
102
103
<?php
 
    /**
     * Clase de conexion
     * Implementada con patron de diseño singleton
     *
     * @author leswider
     */
    class Conexion {
 
        private $_oLinkId; //objeto resource que indicara si se ha conectado
        private $_sServidor;
        private $_sNombreBD;
        private $_sUsuario;
        private $_sClave;
        private $_sPuerto;
        public static $sMensaje;
        private static $_oSelf = null; //Almacenara un objeto de tipo Conexion
 
        /**
         *
         * @param string Nombre del usuario a conectarse.
         * @param string Password de conexión.
         * @param string Nombre de la base de datos.
         * @param string Nombre del servidor.
         */
 
        private function __construct() {
 
            $this->_sServidor = '192.168.X.X';
            $this->_sNombreBD = 'MYDB';
            $this->_sUsuario = 'MYUSER';
            $this->_sClave = 'MYPASS';
            $this->_sPuerto = '1521'; && PUERTO QUE ESCUCHA ORACLE
        }
 
        /**
         * Este es el pseudo constructor singleton
         * Comprueba si la variable privada $_oSelf tiene un objeto
         * de esta misma clase, si no lo tiene lo crea y lo guarda
         * @static
         * @return resource
         */
        public static function getInstancia() {
 
            if (!self::$_oSelf instanceof self) {
                $instancia = new self(); //new self ejecuta __construct()
                self::$_oSelf = $instancia;
                if (!is_resource($instancia->conectar())) {
                    self::$_oSelf = null;
                }
            }
            $conex = self::$_oSelf;
            return $conex->_oLinkId; //Se devuelve el link a la conexion
        }
 
        /**
         * Realiza la conexion
         * @return link para exito, o false
         */
        private function conectar() {
 
            $this->_oLinkId = null;
            $intentos = 0;
            while (!is_resource($this->_oLinkId) && $intentos < 20) {
                $intentos++;
                $this->_oLinkId =
                        oci_connect($this->_sUsuario, $this->_sClave, "(DESCRIPTION = (LOAD_BALANCE = yes)
                               (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = {$this->_sServidor}) (PORT = 1531) ) )
                               (CONNECT_DATA = (FAILOVER_MODE = (TYPE = select) (METHOD = basic) (RETRIES = 180) (DELAY = 5) )
                               (SERVICE_NAME = {$this->_sNombreBD}) ) )");
            }
 
            if (is_resource($this->_oLinkId)) {
                //self::$sMensaje = "Conexion exitosa!<br/>";
            } else {
                self::$sMensaje = "ERROR: No se puede conectar a la base de datos..!<br/>";
            }
            echo self::$sMensaje;
            return $this->_oLinkId;
        }
 
        /**
         * Este método verifica si había una conexión abierta anteriormenete. Si había la cierra.
         *
         * @static
         * @return boolean true si existía la conexión, false si no existía.
         */
        public static function desconectar() {
 
            $conexion_activa = false;
            if (self::$_oSelf instanceof self) {
                $bandera = true;
                $instancia = self::$_oSelf;
                oci_close($instancia->_oLinkId); //cierro la conexion activa
                self::$_oSelf = null; //destruyo el objeto
            }
            return $conexion_activa;
        }
 
    }
 
 ?>

************************************************************************+
Yo la utilico con include, luego capturo el controlador
$link=Conexion::getInstancia();

//cierro la conexio
Conexion::desconectar();
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
Imágen de perfil de xve

Clase para Conectar a Oracle

Publicado por xve (5515 intervenciones) el 01/06/2013 09:36:15
Hola Oscarm muchas gracias por mostrarlo, de verdad muy agradecido!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Clase para Conectar a Oracle

Publicado por N.N (1 intervención) el 08/04/2014 22:47:55
Muy útil, muchísimas gracias por el aporte!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar