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
- <?php
- require_once 'web.config.php';
- final class Database
- {
- private static $dns = DNS;
- private static $username = USERNAME;
- private static $password = PASSWORD;
- private static $instance;
- private function __construct() { }
- /**
- * Crea una instancia de la clase PDO
- *
- * @access public static
- * @return object de la clase PDO
- */
- public static function getInstance()
- {
- if (!isset(self::$instance))
- {
- self::$instance = new PDO(self::$dns, self::$username, self::$password);
- self::$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
- }
- return self::$instance;
- }
- /**
- * Impide que la clase sea clonada
- *
- * @access public
- * @return string trigger_error
- */
- public function __clone()
- {
- trigger_error('Clone is not allowed.', E_USER_ERROR);
- }
- }
- ?>
web.config.php
- <?php
- define('DNS','mysql:dbname=midbname;host=mihost');
- define('USERNAME','miusername');
- define('PASSWORD','mipassword');
- ?>
test.php
- <?php
- /* 1. Conexión a la base de datos */
- require_once 'Database.php';
- $dbh = Database::getInstance();
- /* Creación de la base de datos noticias */
- $dbh->query('CREATE DATABASE `noticias`
- DEFAULT CHARACTER SET
- latin1 COLLATE latin1_swedish_ci');
- $dbh->query('USE `noticias`');
- /* Creación la tabla noticias */
- $dbh->query('CREATE TABLE IF NOT EXISTS `noticia` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `titulo` varchar(50) NOT NULL,
- `texto` varchar(500) NOT NULL,
- PRIMARY KEY (`id`)
- )
- ENGINE=InnoDB
- DEFAULT CHARSET=utf8 AUTO_INCREMENT=2');
- /* Insertando datos en la tabla noticias */
- $dbh->query("INSERT INTO `noticia` (`titulo`, `texto`)
- VALUES ('PHP5 ', 'PHP5 y la POO.')");
- /* 2. Enviar la instrucción SQL a la base de datos */
- $resulset = $dbh->query('SELECT `titulo`,`texto`
- FROM `noticia`
- ORDER BY `titulo`');
- /* 3. Obtener y procesar los resultados */
- $noticia = $resulset->fetchObject();
- echo $noticia->titulo;
- echo $noticia->texto;
- ?>
Artículos relacionados
Muy bueno el Post.
ResponderEliminarQue opinas de utilizar el ADODB en vez de PDO ?