PDO (PHP Data Objects). Capa de Abstracción de acceso a Bases de Datos utilizando el Patrón de diseño Singleton (Segunda parte)

Como crear una Capa de Abstracción de acceso a Bases de Datos utilizando la extensión PDO y el Patrón de diseño Singleton.

Es decir, crearemos una clase Database que usara internamente PDO y el Patrón Singleton.







Ejemplo

Database.php

  1. <?php  
  2. require_once 'web.config.php';  
  3.   
  4. final class Database  
  5. {  
  6.   private static $dns       = DNS;  
  7.   private static $username  = USERNAME;  
  8.   private static $password  = PASSWORD;  
  9.   private static $instance;  
  10.       
  11.   private function __construct() { }  
  12.       
  13.   /** 
  14.    * Crea una instancia de la clase PDO 
  15.    *  
  16.    * @access public static 
  17.    * @return object de la clase PDO 
  18.    */  
  19.   public static function getInstance()  
  20.   {  
  21.     if (!isset(self::$instance))  
  22.     {  
  23.       self::$instance = new PDO(self::$dns, self::$username, self::$password);  
  24.       self::$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
  25.     }  
  26.     return self::$instance;  
  27.   }  
  28.       
  29.       
  30.  /** 
  31.   * Impide que la clase sea clonada 
  32.   *  
  33.   * @access public 
  34.   * @return string trigger_error 
  35.   */  
  36.   public function __clone()  
  37.   {  
  38.     trigger_error('Clone is not allowed.', E_USER_ERROR);  
  39.   }  
  40. }  
  41. ?>  

web.config.php

  1. <?php  
  2. define('DNS','mysql:dbname=midbname;host=mihost');  
  3. define('USERNAME','miusername');  
  4. define('PASSWORD','mipassword');  
  5. ?>  

test.php

  1. <?php  
  2. /* 1. Conexión a la base de datos */  
  3.   
  4. require_once 'Database.php';  
  5. $dbh = Database::getInstance();  
  6.   
  7. /* Creación de la base de datos noticias */  
  8.   
  9. $dbh->query('CREATE DATABASE `noticias`  
  10.              DEFAULT CHARACTER SET  
  11.              latin1 COLLATE latin1_swedish_ci');  
  12. $dbh->query('USE `noticias`');  
  13.   
  14. /* Creación la tabla noticias */  
  15.   
  16. $dbh->query('CREATE TABLE IF NOT EXISTS `noticia` (  
  17.             `id` int(11) NOT NULL AUTO_INCREMENT,  
  18.             `titulo` varchar(50) NOT NULL,  
  19.             `texto` varchar(500) NOT NULL,  
  20.              PRIMARY KEY (`id`)  
  21.             )  
  22.             ENGINE=InnoDB  
  23.             DEFAULT CHARSET=utf8 AUTO_INCREMENT=2');  
  24.   
  25. /* Insertando datos en la tabla noticias */  
  26.   
  27. $dbh->query("INSERT INTO `noticia` (`titulo`, `texto`)  
  28.              VALUES ('PHP5 ''PHP5 y la POO.')");  
  29.   
  30. /* 2. Enviar la instrucción SQL a la base de datos */  
  31.   
  32. $resulset = $dbh->query('SELECT   `titulo`,`texto`   
  33.                          FROM     `noticia`  
  34.                          ORDER BY `titulo`');  
  35.   
  36. /* 3. Obtener y procesar los resultados */  
  37.   
  38. $noticia = $resulset->fetchObject();  
  39. echo $noticia->titulo;  
  40. echo $noticia->texto;  
  41. ?>  

Artículos relacionados