php5 componentes avanzados pdo
TRANSCRIPT
Lenguaje PHP 5
Características Avanzadas
PDO
Profesor: Andrés Guzmán F.
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.
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.
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
Acceso a Bases de DatosDrivers
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 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).
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().
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
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'
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.
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.
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.
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.
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
Acceso a Bases de DatosUtilizar el Método fetchAll
Nos retorna el resultado completo en un array.
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
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.
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.
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.
Acceso a Bases de DatosActualizar Datos en una Tabla
Con Objeto de Sentencia Preparada
Acceso a Bases de DatosObtener Datos desde una Tabla
Con Objeto de Sentencia Preparada
Acceso a Bases de DatosTransacciones
Casi todos los PDO drivers que soportan
transacciones, PDO les provee algunos métodos
para este propósito.
Acceso a Bases de DatosMetadata
Acceso a Bases de DatosLast Insert Id
Acceso a Bases de DatosConnection Information
Acceso a Bases de DatosPDO