Me gustó mucho DevDocs, ya que permite buscar de forma sencilla y clara en la documentación de las especificaciones de CSS, HTML, JavaScript, DOM, sumando también las de jQuery, PHP y Python. Toda la información es sacada de los sitios oficiales o confiables.
Muy recomendado para tener guardado entre los marcadores.
Libro gratuito de jQuery en español: Fundamentos de jQuery
Después de un par de meses de trabajo, les quería contar sobre mi pequeño aporte a la comunidad de diseñadores y desarrolladores web: Fundamentos de jQuery, un libro-web totalmente en español para aprender jQuery desde cero.
El mismo abarca tanto conceptos básicos de JavaScript/jQuery (selectores, eventos, efectos, etc) como avanzados (creación de extensiones, patrones de organización del código, programación con eventos personalizados).
El material es una adaptación del trabajo original realizado por Rebecca Murphey, bajo licencia Creative Commons.
Contenidos del material
- Capítulo 1: Bienvenido
- Capítulo 2: Conceptos Básicos de JavaScript
- Capítulo 3: Conceptos Básicos de jQuery
- Capítulo 4: El núcleo de jQuery
- Capítulo 5: Eventos
- Capítulo 6: Efectos
- Capítulo 7: Ajax
- Capítulo 8: Extensiones
- Capítulo 9: Mejores Prácticas para Aumentar el Rendimiento
- Capítulo 10: Organización del Código
- Capítulo 11: Eventos Personalizados
- Funciones y ejecuciones diferidas a través del objeto $.Deferred
Asi que ya saben, si estan dando sus primeros pasos con jQuery, quieren aprender algunos nuevos conceptos o necesitan algún material de referencia en español, pueden darse una vuelta: http://librojquery.com/
Estilo arquitectónico capas
La programación por capas es un estilo de programación en el que el objetivo primordial es la separación de la lógica de negocios de la lógica de diseño.[1]
Cuando trabajamos sobre aplicaciones web uno de los estilos arquitectónicos utilizado es el estilo Capas. En este estilo pueden utilizarse varias variantes, con 2 capas, 3 capas y hasta n capas, siendo el más común el de 3 capas.
La ventaja principal de este estilo arquitectónico es que en caso de que sobrevenga algún cambio, sólo se ataca al nivel requerido sin tener que revisar entre código mezclado.
La capa de presentación: es la encargada de interactuar con el usuario y se corresponde con lo que tradicionalmente se conoce como interfaz de usuario, esta capa se comunica únicamente con la capa de negocio. Un formlario,ejemplo de una capa de presentación:
Una buena regla general para determinar si la capa de presentación está suficientemente limpia de código es que debería contener una cantidad mínima de código PHP, la suficiente como para que un diseñador HTML sin conocimientos de PHP pueda entenderla. Las instrucciones más comunes en la parte de la vista suelen ser echo, if/else, foreach/endforeach y poco más. Además, no se deben incluir instrucciones PHP que generen etiquetas HTML.
En la capa de negocio o aplicación o intermedia: es donde se localiza la lógica del negocio. Esta capa recibe la petición del usuario a través de la capa de presentación y se encarga de darle curso, recurriendo normalmente a los repositorios de información, dicha capa es donde se implementan las reglas del negocio, las validaciones y cálculos.
La capa de acceso a datos: es la encargada de acceder a los repositorios de información, ejemplo de estas bases de datos.
Como se muestra en la figura la relación entre las capas es unidireccional, es decir solo las capas superiores pueden utilizar los servicios que brindan las capas inferiores, aunque los subsistemas que se encuentran en la misma capa si pueden interactuar entre si.
Otros artículos sobre Patrones
Otros artículos sobre Patrones
Referencias Bibliográficas
[1] Colaboradores de Wikipedia. Programación por capas [en línea]. Wikipedia, La enciclopedia libre, 2010 [fecha de consulta: 6 de marzo del 2010]. Disponible en <http://es.wikipedia.org/w/index.php?title=Programaci%C3%B3n_por_capas&oldid=34731234>.
Abstraerse de los servicios que proveen las herramientas de abstracción de acceso a Bases de Datos
Como habíamos visto en nuestro post anterior
PDO (PHP Data Objects). Capa de Abstracción de acceso a Bases de Datos utilizando el Patrón de diseño Singleton (Segunda parte)
Inconvenientes
Solución
Ejemplo
Ventaja
Bibliografía
Enrique Place, (25 de mayo del 2006). «Comentarios sobre: "¿Cual es la mejor capa de abstracción?"». Consultado el 1 de diciembre de 2009.
PDO (PHP Data Objects). Capa de Abstracción de acceso a Bases de Datos utilizando el Patrón de diseño Singleton (Segunda parte)
Nuestra clase Database que usa internamente el Patrón Singleton: crea una instancia de la clase PDO a través del método getInstance(), pudiendo así invocar todos los métodos y propiedades de la misma.
¿Pero que inconveniente tendríamos si quisiéramos cambiar la Capa de Abstracción de acceso a la Bases de Datos para utilizar ADODB en vez de PDO?
Supongamos que desarrollamos todo nuestro sistema invocando las propiedades y métodos que nos provee PDO.
Inconvenientes
Estaríamos atados a una implementación concreta, con lo que rompemos con una premisa del Diseño Orientado a Objetos.
“No dependas de implementaciones concretas, solo de implementaciones abstractas”
Tendríamos que re implementar toda nuestra lógica de negocio donde quiera que hayamos utilizado una propiedad o método pertenecientes a PDO.
Solución
Adaptar la clase Database para que se abstraiga de las propiedades y métodos concretos que proveen las herramientas de Abstracción de Acceso a Bases de Datos como PDO y ADODB.
Nuestra clase Database debe contener todas las operaciones necesarias para interactuar con cualquier base de datos, pero estos métodos no estarán programados desde cero (reutilización de código), sino que reutilizan internamente algún servicio (extensión o librería) de abstracción de BD. En este caso utilizaremos PDO.
Ejemplo
database.php
- <?php
- require_once 'web.config.php';
- /**
- * Represents a connection between PHP and a database server
- *
- */
- final class Database extends PDO
- {
- static private $dns = DNS;
- static private $username = USERNAME;
- static private $passwd = PASSWD;
- static private $options;
- static private $instance;
- static private $constructIsPrivate = true;
- /**
- * A private constructor; prevents direct creation of object
- *
- * @access static private
- */
- public function __construct()
- {
- if (self::$constructIsPrivate) {
- trigger_error('Call to private ' . __CLASS__ .
- '::__construct() from invalid context', E_USER_ERROR);
- }
- try {
- parent::__construct(self::$dns, self::$username, self::$passwd);
- $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
- } catch (PDOException $e) {
- echo 'Connection failed: ' . $e->getMessage();
- }
- }
- /**
- * Create a instance of Database class with The singleton method
- *
- * @access static public
- * @return Database object
- */
- static public function getInstance()
- {
- if (!isset(self::$instance))
- {
- self::$constructIsPrivate = false;
- $c = __CLASS__;
- self::$instance = new $c;
- self::$constructIsPrivate = true;
- }
- return self::$instance;
- }
- /**
- * Initiates a transaction
- *
- * @access public
- * @return bool
- */
- public function beginTransaction()
- {
- return parent::beginTransaction();
- }
- /**
- * Commits a transaction
- *
- * @access public
- * @return bool
- */
- public function commit()
- {
- return parent::commit();
- }
- /**
- * Fetch the SQLSTATE associated with the last operation on the database handle
- *
- * @access public
- * @return string
- */
- public function errorCode()
- {
- return parent::errorCode();
- }
- /**
- * Fetch extended error information associated with the last operation on the database handle
- *
- * @access public
- * @return array
- */
- public function errorInfo()
- {
- return parent::errorInfo();
- }
- /**
- * Execute an SQL statement and return the number of affected rows
- *
- * @access public
- * @param string $statement
- * @return int
- */
- public function exec($statement)
- {
- return parent::exec($statement);
- }
- /**
- * Return an array of available PDO drivers
- *
- * @access static public
- * @return array
- */
- static public function getAvailableDrivers()
- {
- return parent::getAvailableDrivers();
- }
- /**
- * Returns the ID of the last inserted row or sequence value
- *
- * @access public
- * @param string[optional] $name
- * @return string
- */
- public function lastInsertId($name = null)
- {
- return parent::lastInsertId($name);
- }
- /**
- * Prepares a statement for execution and returns a statement object
- *
- * @access public
- * @param string $statement
- * @param array $driver_options
- * @return PDOStatement
- */
- public function prepare($statement, $driver_options = array() )
- {
- return parent::prepare($statement, $driver_options);
- }
- /**
- * Executes an SQL statement, returning a result set as a PDOStatement object
- *
- * @access public
- * @param string $statement
- * @return PDOStatement
- */
- public function query()
- {
- $args = func_get_args();
- switch(func_num_args()) {
- case 1:
- return parent::query($args[0]);
- break;
- case 2:
- return parent::query($args[0], $args[1]);
- break;
- case 3:
- return parent::query($args[0], $args[1], $args[2]);
- break;
- case 4:
- return parent::query($args[0], $args[1], $args[2], $args[3]);
- break;
- }
- }
- /**
- * Quotes a string for use in a query
- *
- * @access public
- * @param string $string
- * @param int[optional] $parameter_type
- * @return string
- */
- public function quote($string, $parameter_type = PDO::PARAM_STR )
- {
- return parent::quote($string, $parameter_type);
- }
- /**
- * Rolls back a transaction
- *
- * @access public
- * @return bool
- */
- public function rollBack()
- {
- return parent::rollBack();
- }
- /**
- * Set an attribute
- *
- * @access public
- * @param int $attribute
- * @param mixed $value
- * @return bool
- */
- public function setAttribute($attribute, $value)
- {
- return parent::setAttribute($attribute, $value);
- }
- /**
- * Bind a column to a PHP variable
- *
- * @access public
- * @param mixed $column
- * @param mixed $param
- * @param int[optional] $type
- * @param int[optional] $maxlen
- * @param mixed[optional] $driverdata
- * @return bool
- */
- public function bindColumn($column, &$param, $type = null, $maxlen = null, $driverdata = null)
- {
- return parent::bindColumn($column, &$param, $type, $maxlen, $driverdata);
- }
- /**
- * Binds a parameter to the specified variable name
- *
- * @access public
- * @param mixed $parameter
- * @param mixed $variable
- * @param int[optional] $data_type
- * @param int[optional] $length
- * @param mixed[optional] $driver_options
- * @return bool
- */
- public function bindParam($parameter, &$variable, $data_type = PDO::PARAM_STR, $length = null, $driver_options = null)
- {
- return parent::bindParam($parameter, &$variable, $data_type, $length, $driver_options);
- }
- /**
- * Binds a value to a parameter
- *
- * @access public
- * @param mixed $parameter
- * @param mixed $value
- * @param int[optional] $data_type
- * @return bool
- */
- public function bindValue($parameter, $value, $data_type = PDO::PARAM_STR)
- {
- return parent::bindValue($parameter, $value, $data_type);
- }
- /**
- * Closes the cursor, enabling the statement to be executed again
- *
- * @access public
- * @return bool
- */
- public function closeCursor()
- {
- return parent::closeCursor();
- }
- /**
- * Returns the number of columns in the result set
- *
- * @access public
- * @return int
- */
- public function columnCount()
- {
- return parent::columnCount();
- }
- /**
- * Dump a SQL prepared command
- *
- * @access public
- */
- public function debugDumpParams()
- {
- return parent::debugDumpParams();
- }
- /**
- * Executes a prepared statement
- *
- * @access public
- * @param array $input_parameters
- * @return bool
- */
- public function execute($input_parameters = array())
- {
- return parent::execute($input_parameters);
- }
- /**
- * Fetches the next row from a result set
- *
- * @access public
- * @param int[optional] $fetch_style
- * @param int[optional] $cursor_orientation
- * @param int[optional] $cursor_offset
- * @return mixed
- */
- public function fetch($fetch_style = PDO::FETCH_BOTH, $cursor_orientation = PDO::FETCH_ORI_NEXT, $cursor_offset = 0)
- {
- return parent::fetch($fetch_style, $cursor_orientation, $cursor_offset);
- }
- /**
- * Returns an array containing all of the result set rows
- *
- * @access public
- * @param int[optional] $fetch_style
- * @param int[optional] $column_index
- * @param array $ctor_args
- * @return array
- */
- public function fetchAll($fetch_style = PDO::FETCH_BOTH, $column_index = 0 , $ctor_args = array())
- {
- return parent::fetchAll($fetch_style, $column_index, $ctor_args);
- }
- /**
- * Returns a single column from the next row of a result set
- *
- * @access public
- * @param int[optional] $column_number
- * @return string
- */
- public function fetchColumn($column_number = 0)
- {
- return parent::fetchColumn($column_number);
- }
- /**
- * Fetches the next row and returns it as an object
- *
- * @access public
- * @param string[optional] $class_name
- * @param array $ctor_args
- * @return mixed
- */
- public function fetchObject($class_name = 'stdClass', $ctor_args = null)
- {
- return parent::fetchObject($class_name, $ctor_args);
- }
- /**
- * Retrieve a attribute
- *
- * @access public
- * @param int $attribute
- * @return mixed
- */
- public function getAttribute($attribute)
- {
- return parent::getAttribute($attribute);
- }
- /**
- * Returns metadata for a column in a result set
- *
- * @access public
- * @param int $column
- * @return array
- */
- public function getColumnMeta($column)
- {
- return parent::getColumnMeta($column);
- }
- /**
- * Advances to the next rowset in a multi-rowset statement handle
- *
- * @access public
- * @return bool
- */
- public function nextRowset()
- {
- return parent::nextRowset();
- }
- /**
- * Returns the number of rows affected by the last SQL statement
- *
- * @access public
- * @return int the number of rows.
- */
- public function rowCount()
- {
- return parent::rowCount();
- }
- /**
- * Set the default fetch mode for this statement
- *
- * @access public
- * @param $PDO
- * @param object $object
- * @return bool
- */
- public function setFetchMode()
- {
- $args = func_get_args();
- switch(func_num_args()) {
- case 1:
- return parent::setFetchMode($args[0]);
- break;
- case 2:
- return parent::setFetchMode($args[0], $args[1]);
- break;
- case 3:
- return parent::setFetchMode($args[0], $args[1], $args[2]);
- break;
- }
- }
- /**
- * Prevent users to clone the instance
- *
- * @access public
- * @return string trigger_error
- */
- public function __clone()
- {
- trigger_error('Clone is not allowed.', E_USER_ERROR);
- }
- }
- ?>
Ventaja
Si en un futuro, encontramos otra capa de abstracción que se adapte más a nuestro contexto (rendimiento, flexibilidad, simplicidad, etc), podremos reemplazarla, sin que la lógica de nuestra aplicación se vea afectada por el cambio, (nuestra lógica depende de nuestra clase Database, y no concretamente de una capa de abstracción específica).
Artículos Relacionados
- Patrón "Singleton" en PHP5
- PDO (PHP Data Objects). Capa de Abstracción de acceso a Bases de Datos (Primera parte)
- PDO (PHP Data Objects). Capa de Abstracción de acceso a Bases de Datos utilizando el Patrón de diseño Singleton (Segunda parte)
Bibliografía
Enrique Place, (25 de mayo del 2006). «Comentarios sobre: "¿Cual es la mejor capa de abstracción?"». Consultado el 1 de diciembre de 2009.
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
- <?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
PDO (PHP Data Objects). Capa de Abstracción de acceso a Bases de Datos (Primera parte)
PDO (PHP Data Objects) es una extensión nativa de PHP5, consiste en una interface uniforme para acceder a varias bases de datos. PDO provee una capa de abstracción de acceso a bases de datos (BD), que permite al desarrollador abstraerse de la BD de una aplicación. Así, si en alguna fase de desarrollo del proyecto se necesita cambiar de BD, esto no afectaría la lógica de la aplicación.
Actualmente los siguientes drivers implementan la Interface PDO:
Nombre del Driver --------- Base de Datos soportadas
PDO_DBLIB ------------------ FreeTDS / Microsoft SQL Server / Sybase
PDO_FIREBIRD -------------- Firebird/Interbase 6
PDO_IBM --------------------- IBM DB2
PDO_INFORMIX ------------- IBM Informix Dynamic Server
PDO_MYSQL ----------------- MySQL 3.x/4.x/5.x
PDO_OCI ---------------------- Oracle Call Interface
PDO_ODBC ------------------- ODBC v3 (IBM DB2, unixODBC and win32 ODBC)
PDO_PGSQL ------------------ PostgreSQL
PDO_SQLITE ----------------- SQLite 3 and SQLite 2
PDO_4D ---------------------- 4D
Acceso a bases de datos en PHP5 con PDO
La extensión php_pdo para el trabajo con bases de datos esta compuesta por tres clases:
PDO: Representa una conexión entre PHP y un servidor de bases de datos.
PDOStatement: Representa una instrucción preparada y después que la instrucción es ejecutada, una result set.
PDOException: Representa un error lanzado por PDO.
La clase PDO
Sinopsis
2 PDO {
3 __construct ( string $dsn [, string $username
[, string $password [, array $driver_options ]]] )
4 bool beginTransaction ( void )
5 bool commit ( void )
6 mixed errorCode ( void )
7 array errorInfo ( void )
8 int exec ( string $statement )
9 mixed getAttribute ( int $attribute )
10 array getAvailableDrivers ( void )
11 string lastInsertId ([ string $name = NULL ] )
12 PDOStatement prepare ( string $statement
[, array $driver_options = array() ] )
13 PDOStatement query ( string $statement )
14 string quote ( string $string
[, int $parameter_type = PDO::PARAM_STR ] )
15 bool rollBack ( void )
16 bool setAttribute ( int $attribute , mixed $value )
17 }
Métodos- PDO::beginTransaction — Inicializa una transacción.
- PDO::commit — Commits una transacción.
- PDO::__construct — Crea una instancia PDO que representa una conexión a una base de datos.
- PDO::errorCode — Recupera el SQLSTATE asociado con la última operación en la base de datos.
- PDO::errorInfo — Recupera información extendida del error asociado con la ultima operación en la base de datos.
- PDO::exec — Ejecuta una instrucción SQL y retorna el número de filas afectadas.
- PDO::getAttribute — Recupera un atributo de conexión a base de dato.
- PDO::getAvailableDrivers — Retorna un array (arreglo) de los drivers disponibles en la extensión PDO.
- PDO::lastInsertId — Retorna el ID (identificador) de la última fila insertada o secuencia de valores.
- PDO::prepare — Prepara una instrucción para ejecución y retorna un objeto de tipo PDOStatement.
- PDO::query — Ejecuta una instrucción SQL, retornando un resul set como un objeto de tipo PDOStatement.
- PDO::quote — Quotes (Pone entre comillas simples un string) para uso en una query (consulta).
- PDO::rollBack — Rolls back una transacción.
- PDO::setAttribute — Modifica un atributo.
Sinopsis
2 PDOStatement implements Traversable {
3 bool bindColumn ( mixed $column , mixed &$param
[, int $type [, int $maxlen [, mixed $driverdata ]]] )
4 bool bindParam ( mixed $parameter , mixed &$variable
[, int $data_type [, int $length
[, mixed $driver_options ]]] )
5 bool bindValue ( mixed $parameter , mixed $value
[, int $data_type ] )
6 bool closeCursor ( void )
7 int columnCount ( void )
8 bool debugDumpParams ( void )
9 string errorCode ( void )
10 array errorInfo ( void )
11 bool execute ([ array $input_parameters = array() ] )
12 mixed fetch ([ int $fetch_style = PDO::FETCH_BOTH
[, int $cursor_orientation = PDO::FETCH_ORI_NEXT
[, int $cursor_offset = 0 ]]] )
13 array fetchAll ([ int $fetch_style = PDO::FETCH_BOTH
[, int $column_index [, array $ctor_args = array() ]]] )
14 string fetchColumn ([ int $column_number = 0 ] )
15 mixed fetchObject ([ string $class_name
[, array $ctor_args ]] )
16 mixed getAttribute ( int $attribute )
17 array getColumnMeta ( int $column )
18 bool nextRowset ( void )
19 int rowCount ( void )
20 bool setAttribute ( int $attribute , mixed $value )
21 bool setFetchMode ( int $mode )
22 }
- PDOStatement->bindColumn — Sustituye el valor de una columna de la base de datos a una variable PHP.
- PDOStatement->bindParam — Sustituye el valor de un parámetro (argumento), a el nombre de variable especificada.
- PDOStatement->bindValue — Sustituye un valor como parámetro.
- PDOStatement->closeCursor — Cierra el cursor, habilitando la instrucción a ser ejecutada otra vez.
- PDOStatement->columnCount — Retorna el numero de columnas en el result set.
- PDOStatement->debugDumpParams — Dump un commando SQL preparado.
- PDOStatement->errorCode — Recupera el SQLSTATE asociado con la última operación realizada en la base de datos.
- PDOStatement->errorInfo — Recupera información de error extendida asociada con la ultima operación realizada en la base de datos.
- PDOStatement->execute — Ejecuta una instrucción preparada.
- PDOStatement->fetch — Recupera la siguiente fila de una result set.
- PDOStatement->fetchAll — Retorna un array conteniendo todas las filas del resul set.
- PDOStatement->fetchColumn — Retorna una única columna de la siguiente fila de un result set.
- PDOStatement->fetchObject — Recupera la siguiente fila y la retorna como un objeto.
- PDOStatement->getAttribute — Recupera una atributo.
- PDOStatement->getColumnMeta — Retorna metadatos de una columna en un resul set.
- PDOStatement->nextRowset — Avanza a la siguiente Rowset en un multi-rowset.
- PDOStatement->rowCount — Retorna el numero de filas afectadas por la última instrucción SQL.
- PDOStatement->setAttribute — Modifica un atributo.
- PDOStatement->setFetchMode — Modifica el valor por defecto para recuperar datos de la base de datos para la instrucción actual.
1. Conectar con el servidor de bases de datos.
2. Enviar la instrucción SQL a la base de datos.
3. Obtener y procesar los resultados.
A continuación vemos los métodos concretos con los que realizaremos estas operaciones:
1. Conectar con el servidor de bases de datos (Crear el objeto PDO):
Descripción
PDO::__construct ( string $dsn [, string $username
[, string $password [, array $driver_options ]]] )
Lista de parámetrosDNS: (Data Source Name), contiene la información requerida para conectarse a la base de datos.
username: El nombre de usuario. Este parámetro es opcional para algunos PDO drivers .
password: La contraseña. Este parámetro es opcional para algunos PDO drivers.
driver_options: Una llave=>valor del arreglo de opciones con driver de conexión especifico.
Valores retornados
En caso de éxito retorna un objeto PDO.
Errores/Excepciones
PDO::__construct() dispara un PDOException si el intento de conexión a la base de datos falla.
2. Enviar la instrucción SQL a la base de datos:
Descripción
PDOStatement PDO::query ( string $statement )
PDOStatement PDO::query ( string $statement ,
int $PDO::FETCH_COLUMN ,
int $colno )
PDOStatement PDO::query ( string $statement ,
int $PDO::FETCH_CLASS,
string $classname ,
array $ctorargs )
PDOStatement PDO::query ( string $statement ,
int $PDO::FETCH_INTO ,
object $object )
Lista de parámetrosInstrucción SQL.
Valores retornados
PDO::query() retorna un objeto PDOStatement.
3. Obtener y procesar los resultados.
Descripción
mixed PDOStatement::fetchObject ([ string $class_name
[, array $ctor_args ]] )
Lista de parámetrosclass_name: Nombre de la clase a crear, por defecto utiliza stdClass.
ctor_args: Elementos de este arreglo son pasados al constructor.
Valores retornados
Retorna una instancia de la clase requerida, con el nombre de las propiedades correspondiente a los nombres de las columnas o false in caso de un error.
Ejemplo completo
- <?php
- /* 1. Conexión a la base de datos */
- $dsn = 'mysql:dbname=noticias;host=127.0.0.1';
- $user = 'dbuser';
- $password = 'dbpass';
- try
- {
- $dbh = new PDO($dsn, $user, $password);
- }
- catch (PDOException $e)
- {
- echo 'Connection failed: ' . $e->getMessage();
- }
- /* 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;
- ?>
Conclusión
PDO cumple con una premisa del diseño Orientado a Objetos:
“No dependas de implementaciones concretas, solo de implementaciones abstractas”[1]PDO es una implementación abstracta, un paso a mejorar el performance de nuestras aplicaciones con desarrollos más portables y escalables.
Artículos relacionados
Referencias Bibliográficas
[1] Enrique Place, (mayo 25, 2006). «Comentarios sobre: "¿Cual es la mejor capa de abstracción?"». Consultado el 1 de octubre del 2009.
Bibliografía
Colaboradores de Wikipedia. Capa de abstracción [en línea]. Wikipedia, La enciclopedia libre, 2009 [fecha de consulta: 17 de julio del 2009]. Disponible en <http://es.wikipedia.org/w/index.php?title=Capa_de_abstracci%C3%B3n&oldid=28148126>.
Suscribirse a:
Entradas (Atom)