Está en la página 1de 26

Lenguaje PHP 5 Caractersticas Avanzadas PDO

Profesor: Andrs Guzmn F.

Acceso a Bases de Datos


PDO

PHP Data Objects (o PDO) es una extensin que provee una capa de abstraccin de acceso a datos para PHP 5, escrita en C, con lo cual se consigue hacer uso de las mismas funciones para hacer consultas y obtener datos de distintos manejadores de bases de datos. Est implementada con tecnologa orientada a objetos. La conexin a una base de datos se realiza creando una instancia de la clase base PDO. Algunos mtodos son: prepare, execute, exec, beginTransaction, bindParam, commit. La extensin PHP Data Objects (PDO) define una interfaz ligera y consistente para acceder a bases de datos en PHP. Cada driver de bases de datos que implementa la interfaz PDO puede exponer caractersticas especficas de la base de datos.

Acceso a Bases de Datos


PDO

PHP Data Objects, ms conocida por sus siglas PDO, es una API que permite la ejecucin de operaciones sobre bases de datos desde el lenguaje de programacin PHP5 Independientemente del sistema operativo donde se ejecute o de la base de datos a la cual se accede El API PDO se presenta como una coleccin de interfaces y mtodos de gestin de manejadores de conexin hacia cada modelo especfico de base de datos. Para utilizar una base de datos particular, el usuario ejecuta su programa junto con la librera de conexin apropiada al modelo de su base de datos, por medio extensiones en php.ini, y accede a ella estableciendo una conexin,

A partir de all puede realizar con cualquier tipo de tareas con la base de datos: consulta, creacin, modificacin y borrado de tablas, etc.

Acceso a Bases de Datos


PDO

De esta forma, si una empresa distribuye una aplicacin PHP5 para que sus usuarios puedan acceder a su servidor MS SQL Server y posteriormente decide cambiar el servidor por Oracle, Mysql, PostGres o DB2, no necesita volver a distribuir la aplicacin, sino que nicamente debe reconfigurar el adaptador al motor de base de datos correspondiente. PDO fue diseado para mantener sencillas las cosas simples. Esto significa que el API PDO hace muy sencillas las tareas diarias de una base de datos, como una simple sentencia SELECT. Esta seccin nos llevar a travs de ejemplos que utilizan el PDO para ejecutar sentencias SQL comunes, para que podamos ver lo sencillo que es la utilizacin del API

Acceso a Bases de Datos


Drivers

Los siguientes controladores actualmente implementan la interfaz PDO:


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 y win32 ODBC) PDO_PGSQL: PostgreSQL PDO_SQLITE: SQLite 3 y SQLite 2

Acceso a Bases de Datos


PDO
PDO crea bsicamente una capa de abstraccin, que permite al desarrollador abstraerse de la base de datos de una aplicacin. Y de esa manera, hacer el cdigo portable a otras plataformas y motores de bases de datos. PDO es una librera escrita en C que viene activada por defecto a partir de PHP 5.1, es una interface de acceso a datos que nos permite mediante diferentes drivers conectarnos a una gran variedad de Bases de Datos (MySQL, SQLite, PostgreSQL, ADODB, etc).

Acceso a Bases de Datos


Cargar los Drivers

Cargar el driver o drivers que queremos utilizar es muy sencillo y slo implica una lnea de directiva en el php.ini. Si, por ejemplo, queremos utilizar el puente PDO-MySQL, se cargara la siguiente lnea de cdigo

extension=pdo.so extension=pdo_mysql.so

Verificamos esto, con una llamada a la funcin phpinfo().

Acceso a Bases de Datos


Hacer la Conexin

PDO nos ofrece una interfaz orientada a objetos bastante sencilla de utilizar. Para establecer la conexin a la base de datos, tenemos que crear un nuevo objeto PDO, pasndole como parmetro al constructor la URL de conexin a la base de datos, el usuario y la clave:

Si uno de los drivers que hemos cargado reconoce la URL suministrada por el mtodo, dicho driver establecer una conexin con el controlador de base de datos especificado en la URL del PDO. La clase PDO, maneja todos los detalles del establecimiento de la conexin detrs de la escena. En caso de error, lanzar una excepcin del tipo PDOException

Acceso a Bases de Datos


Uso de Excepciones

Con el atributo PDO::ATTR_ERRMODE asignado a la constante PDO::ERRMODE_EXCEPTION nos permite usar control y manejo de excepciones en PDO, cuando ocurra un error del tipo:
Connected to database SQLSTATE[42S22]: Column not found: 1054 Unknown column 'username' in 'field list'

Por defecto PDO::ERRMODE_SILENT

Acceso a Bases de Datos


Crear sentencias PDO

Un objeto de conexin PDO, mediante el mtodo query enva nuestras sentencias SQL al controlador de la base de datos y nos retorna un objeto PDOStatement con el resultado. El mtodo query se utiliza para sentencias del tipo SELECT. Para sentencias que crean o modifican tablas, el mtodo a utilizar es exec.

Se toma un ejemplar de una conexin activa para crear un objeto PDOStatement. En el siguiente ejemplo, utilizamos nuestro objeto PDO de conexin: conn para crear el objeto PDOStatement: stmt.

Acceso a Bases de Datos


Ejecutar Sentencias PDO

Las sentencias que crean, modifican o eliminan tablas son todas ejemplos de sentencias DDL y se ejecutan con el mtodo exec. Cmo se podra esperar de su nombre, el mtodo exec tambin se utiliza para ejecutar sentencias SQL que actualizan un tabla: Modificar, Eliminar, Insertar. En la prctica exec se utiliza ms frecuentemente para actualizar tablas que para crearlas porque una tabla se crea slo una vez, pero se puede actualizar muchas veces.

Acceso a Bases de Datos


Actualizar Datos en una Tabla

Siempre que query devuelve un objeto PDOStatement que contiene los resultados de una peticin al controlador de la base datos El valor devuelto por exec es un int que indica cuntas lneas de la tabla fueron actualizadas.

Acceso a Bases de Datos


Obtener Datos desde una Tabla

El mtodo query, como se mencion anteriormente, se utiliza para ejecutar sentencias SELECT, que comprenden la amplia mayora de las sentencias SQL.

PDO devuelve los resultados en un objeto PDOStatement, por eso necesitamos declarar un ejemplar de la clase PDOStatement para contener los resultados.

Acceso a Bases de Datos


Utilizar el Mtodo fetch

La variable result, que es un ejemplar de PDOStatement, contiene cada uno de los registros obtenidos en la consulta Para acceder a los datos, iremos a la fila y recuperaremos los valores de acuerdo al resultado en curso. El mtodo fetch mueve algo llamado cursor a la siguiente fila y hace que esa fila (llamada fila actual) sea con la que podamos operar

Como el cursor inicialmente se posiciona justo encima de la primera fila de un objeto PDOStatement, primero debemos llamar al mtodo fetch para mover el cursor a la primera fila y convertirla en la fila actual

Acceso a Bases de Datos


Utilizar el Mtodo fetchAll

Nos retorna el resultado completo en un array.

Acceso a Bases de Datos


Fetch Modes

FETCH_ASSOC: Retorna un array indexado por nombre de columna como resultado del result set FETCH_NUM: Retorna un array indexado por el nmero de columna como resultado del result set , comenzando en 0 FETCH_BOTH: Es el valor por defecto, retorna un array indexado por ambos, por el nmero y nombre de columna como resultado del result set FETCH_OBJECT: Retorna un objeto con las propiedades que corresponden al nombre de la columna como resultado del result set FETCH_LAZY: Combina PDO::FETCH_BOTH and PDO::FETCH_OBJ, crea un objeto tan pronto sean accedidas FETCH_CLASS: Crea una instancia de la clase que se especifica y mapea los nombres de columnas a los atributos/variables de la clase

Acceso a Bases de Datos


Utilizar Sentencias Preparadas

Algunas veces es ms conveniente o eficiente utilizar objetos PDOStatement preparados para enviar sentencias SQL a la base de datos Si queremos ejecutar muchas veces un objeto PDOStatement, reduciremos el tiempo de ejecucin si utilizamos un objeto PDOStatement preparado, en su lugar Aunque los objetos PDOStatement preparados se pueden utilizar con sentencias SQL sin parmetros, probablemente nosotros utilizaremos ms frecuentemente sentencias con parmetros. La ventaja de utilizar sentencias SQL que utilizan parmetros es que podemos utilizar la misma sentencia y suministrar distintos valores cada vez que la ejecutemos.

Acceso a Bases de Datos


Crear Objeto Sentencia Preparada

Al igual que los objetos PDOStatement, creamos un objeto PDOStatement preparados con un objeto PDO de conexin. Utilizando nuestra conexin conn abierta en ejemplos anteriores, podramos escribir lo siguiente para crear un objeto PDOStatement preparado que tome dos parmetros de entrada.

Acceso a Bases de Datos


Asignar Valores para los Parmetros de un Objeto Preparado

Necesitamos suministrar los valores que se utilizarn en los lugares donde estn las marcas de interrogacin, si hay alguno, antes de ejecutar un objeto PDOStatement preparado. Podemos hacer esto llamado a uno de los mtodos bindValue o bindParam definidos en la clase PDOStatement preparado.

El tercer parmetro opcional, fuerza a un determinado tipo, mediante la constante PDO::PARAM_*. Por defecto es PDO::PARAM_STR. bindParam el segundo parmetro, el valor, tiene que ser una referencia y no un valor esttico.

bindParam tiene un cuarto parmetro que es el largo del tipo de dato, es opcional.

Acceso a Bases de Datos


Actualizar Datos en una Tabla Con Objeto de Sentencia Preparada

Acceso a Bases de Datos


Obtener Datos desde una Tabla Con Objeto de Sentencia Preparada

Acceso a Bases de Datos


Transacciones
Casi todos los PDO drivers que soportan transacciones, PDO les provee algunos mtodos para este propsito.

Acceso a Bases de Datos


Metadata

Acceso a Bases de Datos


Last Insert Id

Acceso a Bases de Datos


Connection Information

Acceso a Bases de Datos


PDO