Cuando utilizamos aplicaciones web con conexión a base de datos MYSQL, se suele crear una clase que gestione la interacción MySQL/PHP, y esta instanciarla cada vez que se requiera hacer uso de ella, sin embargo cuando tenemos que realizar multiples conexiones al servidor esto no es muy eficiente, es decir, si tenemos una clase conexión como la siguiente:
CLASE: db_A.class.php
<?php class database { var $localhost = "localhost"; var $usuario = "root" ; var $password = "root"; var $database = "db123"; private $conexion = NULL; /* METODO PARA CONECTAR CON LA BASE DE DATOS*/ public function __construct() { if(!isset($this->conexion)){ $this->conexion = (mysql_connect($this->localhost, $this->usuario,$this->password)) or die(mysql_error() ); if ($this->conexion) echo 'Conexión a base de datos establecida<br/>'; mysql_select_db($this->database , $this->conexion) or die(mysql_error()); } } /* METODO PARA REALIZAR UNA CONSULTA */ public function consulta() { $q=" SELECT * FROM estudiante ORDER BY rand() LIMIT 1"; $resultado = mysql_query($q,$this->conexion); if(!$resultado){ echo 'MySQL Error: ' . mysql_error(); exit; } while ($fila = mysql_fetch_assoc($resultado)) { echo 'Registro: '.$fila["id"].' | '.$fila["nombre"].' | '.$fila["edad"].'<br/>'; } } } ?>
Para este ejemplo utilizamos una base de datos «db123» la cual tiene la siguiente tabla:
CREATE TABLE estudiante ( id int(2) NOT NULL auto_increment, nombre varchar(32) NOT NULL, edad varchar(32) NOT NULL, PRIMARY KEY (id) ) INSERT INTO estudiante VALUES (1, 'Pedro Picapiedra', '34'); INSERT INTO estudiante VALUES (2, 'Pablo Marmol', '45'); INSERT INTO estudiante VALUES (3, 'Bartolomeo', '22'); INSERT INTO estudiante VALUES (4, 'Moe', '37');
Cuando implementamos nuestra clase de conexion «db_A.class.php» , hacemos lo siguiente:
<?php require_once 'db_A.class.php'; $db1 = new database(); $db1->consulta(); $db2 = new database(); $db2->consulta(); $db3 = new database(); $db3->consulta(); ?>
Para cada objeto creamos una instancia a la clase «database» y ejecutamos una consulta, esto nos da como resultado:
Conexión a base de datos establecida Registro: 4 | Moe | 37 Conexión a base de datos establecida Registro: 2 | Pablo Marmol | 45 Conexión a base de datos establecida Registro: 4 | Moe | 37
Como se puede ver, cada que se crea una instancia de clase, se realiza una nueva conexión a la base de datos, esto si bien no esta mal, no es muy eficiente cuando tenemos múltiples tareas que realizar con el servidor, para optimizar nuestra clase de conexión, es mucho mejor hacer uso de las propiedades estáticas (STATIC), esto nos permite compartir una conexión al servidor entre varios objetos de una clase, por ejemplo, modificamos nuestra clase de conexión ahora llamada db_B.class.php, de la siguiente manera:
<?php class database { var $localhost = "localhost"; var $usuario = "root" ; var $password = "root"; var $database = "db123"; private static $conexion=NULL; /* METODO PARA CONECTAR CON LA BASE DE DATOS*/ public function __construct() { if(!isset(self::$conexion)) { self::$conexion = (mysql_connect($this->localhost, $this->usuario,$this->password)) or die(mysql_error() ); if (self::$conexion) echo 'Conexión a base de datos establecida<br/>'; mysql_select_db($this->database , self::$conexion) or die(mysql_error()); } } /* METODO PARA REALIZAR UNA CONSULTA */ public function consulta() { $q=" SELECT * FROM estudiante ORDER BY rand() LIMIT 1"; $resultado = mysql_query($q,self::$conexion); if(!$resultado){ echo 'MySQL Error: ' . mysql_error(); exit; } while ($fila = mysql_fetch_assoc($resultado)) { echo 'Registro: '.$fila["id"].' | '.$fila["nombre"].' | '.$fila["edad"].'<br/><br/>'; } } } ?>
Modificamos nuestra variable $conexion convirtiendo esta en STATIC, la forma de referirnos a ella en nuestra clase es utilizando la instrucción SELF seguido de dos puntos «self::variable_estática«, el resto del código se mantiene igual.
<?php require_once 'db_B.class.php'; $db1 = new database(); $db1->consulta(); $db2 = new database(); $db2->consulta(); $db3 = new database(); $db3->consulta(); ?>
ejecutamos el código:
Conexión a base de datos establecida Registro: 2 | Pablo Marmol | 45 Registro: 1 | Pedro Picapiedra | 34 Registro: 1 | Pedro Picapiedra | 34
Como se ve en el gráfico superior, solo se realiza una conexión al servidor aunque creamos tres instancias a nuestra clase de conexión como en el primer ejemplo, la variable STATIC nos permite compartir la conexión entre las clases y así evita crear nuevas conexiones innecesarias.
Archivos utilizados en este post, AQUI
En este post veremos como crear una aplicación de ayuda al usuario similar al extinto javahelp. Pero en esta oportunidad[...]
Java Help es (o era) una librería para java que permitía añadir ventanas de ayuda HTML a nuestros proyectos, al ser una[...]
El modelo Tweetbotornot es un algoritmo de aprendizaje automático que se entrenó en miles de cuentas reales de bot y no[...]
Microsoft el gigante de la tecnología está tratando de hacer que Python sea más fácil de comprender para aquellos intere[...]
Cada versión de Linux viene con su propia terminal predeterminada para interactuar con el Sistema Operativo a través de[...]
El juego de las tragamonedas o tragaperras es un juego muy popular de azar que se puede encontrar tanto en los casinos o[...]