Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Desarrollo Web / PHP / Compartir conexión de base de datos

Compartir conexión de base de datos

Autor jc mouse viernes, mayo 25, 2012

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

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Envío de correo con JavaMail/Netbeans

Envío de correo con JavaMail/Netbeans

JavaMail es una expansión de Java que facilita el envío y recepción de e-mail desde código java. JavaMail implementa el...

Utiliza 2 bases de datos diferentes en una aplicación parte I

Utiliza 2 bases de datos diferentes en una aplicación parte I

Cuando se desarrolla una aplicación, puede ser un requisito que este tenga soporte para varias tipos de base de datos, s...

Ejercicios sencillos en C Sharp

Ejercicios sencillos en C Sharp

Lenguaje: C# Nivel: Básico 1) Se desea desarrollar un programa que permita introducir una oración por teclado y contar l...

Primeros pasos con JavaFX

Primeros pasos con JavaFX

¿Qué es javaFX? JavaFX es una familia de productos y tecnologías de Sun Microsystems, adquirida por Oracle Corporation,...

Métodos Numéricos: Sustitución Directa

Métodos Numéricos: Sustitución Directa

El Método de Sustitución Directa básicamente consiste en asumir un valor, reemplazar el mismo en la función despejada y...

Simulador de Urna Electrónica en java

Simulador de Urna Electrónica en java

Hola 🙂 en esta ocasión un amigo del Brasil nos envía un proyecto java de una Urna Electrónica o Voto Electronico, desarr...

1 comentario en “Compartir conexión de base de datos”

  1. Henry Garcia dice:

    La verdad, apenas estoy aprendiendo este lenguaje pero veo con bastante agrado como alguien que tiene mucho conocimiento como vos, explica de una manera sencilla buenas prácticas de programación, sin dar tantas vueltas al asunto y mostrando con claridad la diferencia.

    Nuevamente y de manera respetuosa le solicito si tiene a su disposición aplicativos como los que ha realizado en java y manejan actualización y cálculos con varias tablas.

    Muchas gracias por compartir su conocimiento.

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

MyBatis es un framework de persistencia Java que se encarga de mapear sentencias SQL y procedimientos almacenados a part...

Webcam Capture es un API  que permite usar una cámara web incorporada o externa directamente desde código Java utilizand...

im4java es una interfaz pura de Java para la línea de comandos de ImageMagick. La interfaz de la línea de comandos de IM...

En un post anterior conocimos una herramienta Open Source con un conjunto de herramientas para el trabajo con imágenes e...

Herramientas

Generador de Enlaces a Whatsapp