php5 componentes avanzados pdo

26
Lenguaje PHP 5 Características Avanzadas PDO Profesor: Andrés Guzmán F.

Upload: patricio-cardenas-garay

Post on 04-Aug-2015

222 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Php5 Componentes Avanzados Pdo

Lenguaje PHP 5

Características Avanzadas

PDO

Profesor: Andrés Guzmán F.

Page 2: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosPDO

PHP Data Objects (o PDO) es una extensión que provee una capa de

abstracción 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 tecnología orientada a objetos. La conexión a

una base de datos se realiza creando una instancia de la clase base

PDO. Algunos métodos son: prepare, execute, exec, beginTransaction,

bindParam, commit.

La extensión 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 características específicas de la base de datos.

Page 3: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosPDO

PHP Data Objects, más conocida por sus siglas PDO, es una API que

permite la ejecución de operaciones sobre bases de datos desde el

lenguaje de programación 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 colección de interfaces y métodos

de gestión de manejadores de conexión hacia cada modelo específico

de base de datos.

Para utilizar una base de datos particular, el usuario ejecuta su

programa junto con la librería de conexión apropiada al modelo de su

base de datos, por medio extensiones en php.ini, y accede a ella

estableciendo una conexión,

A partir de allí puede realizar con cualquier tipo de tareas con la base

de datos: consulta, creación, modificación y borrado de tablas, etc.

Page 4: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosPDO

De esta forma, si una empresa distribuye una aplicación 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 aplicación, sino que

únicamente debe reconfigurar el adaptador al motor de base de datos

correspondiente.

PDO fue diseñado 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 sección nos llevará a través de ejemplos que utilizan el PDO para

ejecutar sentencias SQL comunes, para que podamos ver lo sencillo

que es la utilización del API

Page 6: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosPDO

PDO crea

básicamente una

capa de abstracción,

que permite al

desarrollador

abstraerse de la

base de datos de

una aplicación. Y de

esa manera, hacer

el código portable a

otras plataformas y

motores de bases

de datos.

PDO es una librería

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).

Page 7: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosCargar los Drivers

Cargar el driver o drivers que queremos utilizar es muy sencillo y sólo

implica una línea de directiva en el php.ini. Si, por ejemplo, queremos

utilizar el puente PDO-MySQL, se cargaría la siguiente línea de código

extension=pdo.so

extension=pdo_mysql.so

Verificamos esto, con una llamada a la función phpinfo().

Page 8: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosHacer la Conexión

PDO nos ofrece una interfaz orientada a objetos bastante sencilla de

utilizar. Para establecer la conexión a la base de datos, tenemos que

crear un nuevo objeto PDO, pasándole como parámetro al constructor

la URL de conexión a la base de datos, el usuario y la clave:

Si uno de los drivers que hemos cargado reconoce la URL

suministrada por el método, dicho driver establecerá una conexión con

el controlador de base de datos especificado en la URL del PDO.

La clase PDO, maneja todos los detalles del establecimiento de la

conexión detrás de la escena.

En caso de error, lanzará una excepción del tipo PDOException

Page 9: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosUso 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:

Por defecto PDO::ERRMODE_SILENT

Connected to database

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'username' in

'field list'

Page 10: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosCrear sentencias PDO

Un objeto de conexión PDO, mediante el método query envía

nuestras sentencias SQL al controlador de la base de datos y nos

retorna un objeto PDOStatement con el resultado.

El método query se utiliza para sentencias del tipo SELECT.

Para sentencias que crean o modifican tablas, el método a utilizar es

exec.

Se toma un ejemplar de una conexión activa para crear un objeto

PDOStatement. En el siguiente ejemplo, utilizamos nuestro objeto

PDO de conexión: conn para crear el objeto PDOStatement: stmt.

Page 11: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosEjecutar Sentencias PDO

Las sentencias que crean, modifican o eliminan tablas son todas

ejemplos de sentencias DDL y se ejecutan con el método exec.

Cómo se podría esperar de su nombre, el método exec también se

utiliza para ejecutar sentencias SQL que actualizan un tabla: Modificar,

Eliminar, Insertar.

En la práctica exec se utiliza más frecuentemente para actualizar

tablas que para crearlas porque una tabla se crea sólo una vez, pero

se puede actualizar muchas veces.

Page 12: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosActualizar Datos en una Tabla

Siempre que query devuelve un objeto PDOStatement que contiene

los resultados de una petición al controlador de la base datos

El valor devuelto por exec es un int que indica cuántas líneas de la

tabla fueron actualizadas.

Page 13: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosObtener Datos desde una Tabla

El método query, como se mencionó anteriormente, se utiliza para

ejecutar sentencias SELECT, que comprenden la amplia mayoría 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.

Page 14: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosUtilizar el Método 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 método 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 método

fetch para mover el cursor a la primera fila y convertirla en la fila actual

Page 15: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosUtilizar el Método fetchAll

Nos retorna el resultado completo en un array.

Page 16: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosFetch Modes

FETCH_ASSOC: Retorna un array indexado por nombre de columna

como resultado del result set

FETCH_NUM: Retorna un array indexado por el número 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 número 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

Page 17: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosUtilizar Sentencias Preparadas

Algunas veces es más 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 ejecución si utilizamos un objeto

PDOStatement preparado, en su lugar

Aunque los objetos PDOStatement preparados se pueden utilizar con

sentencias SQL sin parámetros, probablemente nosotros utilizaremos

más frecuentemente sentencias con parámetros.

La ventaja de utilizar sentencias SQL que utilizan parámetros es que

podemos utilizar la misma sentencia y suministrar distintos valores

cada vez que la ejecutemos.

Page 18: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosCrear Objeto Sentencia Preparada

Al igual que los objetos PDOStatement, creamos un objeto

PDOStatement preparados con un objeto PDO de conexión.

Utilizando nuestra conexión conn abierta en ejemplos anteriores,

podríamos escribir lo siguiente para crear un objeto PDOStatement

preparado que tome dos parámetros de entrada.

Page 19: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosAsignar Valores para los

Parámetros de un Objeto Preparado

Necesitamos suministrar los valores que se utilizarán en los lugares

donde están las marcas de interrogación, si hay alguno, antes de

ejecutar un objeto PDOStatement preparado.

Podemos hacer esto llamado a uno de los métodos bindValue o

bindParam definidos en la clase PDOStatement preparado.

El tercer parámetro opcional, fuerza a un determinado tipo, mediante la

constante PDO::PARAM_*. Por defecto es PDO::PARAM_STR.

bindParam el segundo parámetro, el valor, tiene que ser una

referencia y no un valor estático.

bindParam tiene un cuarto parámetro que es el largo del tipo de dato,

es opcional.

Page 20: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosActualizar Datos en una Tabla

Con Objeto de Sentencia Preparada

Page 21: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosObtener Datos desde una Tabla

Con Objeto de Sentencia Preparada

Page 22: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosTransacciones

Casi todos los PDO drivers que soportan

transacciones, PDO les provee algunos métodos

para este propósito.

Page 23: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosMetadata

Page 24: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosLast Insert Id

Page 25: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosConnection Information

Page 26: Php5 Componentes Avanzados Pdo

Acceso a Bases de DatosPDO