
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>.
hola dos cosas:
ResponderEliminarprimero que me parecen excelentes tus artículos,
y segundo que tiene un pequeño error en el script.
en la linea nº4
Connection failed: SQLSTATE[42000] [1049] Unknown database 'dbtest'
$dsn = 'mysql:dbname=dbtest;host=127.0.0.1';
debe ser
$dsn = 'mysql:$dbname=$dbtest;host=127.0.0.1';
asi funciona ;)
gracias por todo
Muy buena tu explicación, tan buena como tus artículos....
ResponderEliminarGracias nuevamente