Clase singleton PHP de conexión a MySQL

Bueno he decidido publicar una clase que me ha sido muy útil durante mucho tiempo, hasta que descubrí las bondades de la
Extensión MySQL mejorada incluida en la versión 4.1
del lenguaje. Obviamente si ya utilizáis mysqli no os aportará mucho, pero seguro que a alguien le sirve y le sabe sacar provecho.

El funcionamiento es bastante sencillo, pero por si acaso al final del código os dejaré un ejemplo de como usarla. Espero que os sirva de ayuda. Un saludo.

<?php

//Author: Fernando Rodríguez-Izquierdo Serrano

class db{
  static private $instancia = NULL;
  private $servidor;
  private $usuario;
  private $password;
  private $basedatos;
  private $conexion;
	
  public function __construct($servidor,$usuario,$password,$basedatos){
    $this->servidor = $servidor;
    $this->usuario = $usuario;
    $this->password = $password;
    $this->basedatos = $basedatos;
  }

	//Función de conexión
  private function conectar(){
    $this->conexion = mysql_connect($this->servidor,$this->usuario,$this->password) or DIE(mysql_error());
    mysql_select_db($this->basedatos, $this->conexion);
  }
	
  public function desconectar(){
    mysql_close($this->conexion);
  }
	
  public function dameQuery($query){
    $this->conectar();
    $res = mysql_query($query) or die (mysql_error());
    $this->desconectar();
    return $res;	
  }
	
  public function dameQuerySinCerrar($query){
    $this->conectar();
    $res = mysql_query($query) or die (mysql_error());
    return $res;	
  }
	
  public function dameQuerySinAbrir($query){
  		
    $res = mysql_query($query) or die (mysql_error());
    $this->desconectar();
    return $res;	
  }
	
  public function dameQuerySinAbrirCerrar($query){		
    $res = mysql_query($query) or die (mysql_error());		
    return $res;	
  }
	
  static public function getInstancia($servidor,$usuario,$password,$basedatos) {
    if (self::$instancia == NULL) {
      self::$instancia = new db($servidor,$usuario,$password,$basedatos);
    }
    return self::$instancia;
  }
    
  public function mysql_escape_string($var){
    $this -> conectar();
    $result = mysql_escape_string($var);
    $this -> desconectar();
    return $result;
  }
		
}
?>

Aquí os dejo un ejemplo de como listar datos de una tabla de vuestra base de datos.

<?php
require_once "db.Class.php";
$db = db::getInstancia("miservidor.es","nombreDeUsuario","contraseña","baseDeDatos");
$result = $db -> dameQuery("SELECT * FROM clientes");
while($cliente = mysql_fetch_array($result)){
  echo $cliente['nombre']." ".$cliente['apellidos']." ".$cliente['email'];
}
?>
Se sociable y comparte!

2 thoughts on “Clase singleton PHP de conexión a MySQL

  1. Pablo

    Hola, una sugerencia, debes especificar el constructor como private y especificar tu mismo los datos de conexion en el constructor a fin de no pasar parametros desde getInstancia($servidor,$usuario,$password,$basedatos), tu intención en el ejemplo parece un singleton muy a tu manera

    • La idea es no tener una clase distinta para cada base de datos a la que se necesite conectar.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>