Escolar Documentos
Profissional Documentos
Cultura Documentos
16/04/2012
1. Introduccin 2. Objetos de acceso a datos (PDO) El objeto PDO El objeto PDOStatement Tratamiento de errores
Febrero de 2012
Introduccin
1. Introduccin 2. Objetos de acceso a datos (PDO) El objeto PDO El objeto PDOStatement Tratamiento de errores
SQL es el lenguaje comn para trabajar con todas las BD. Las interfaces que los programadores usan para trabajar con BD varan mucho.
Para resolver estos problemas se necesitan capas de abstraccin respecto de la BD (una interfaz comn).
Febrero 2012
IISSI
16/04/2012
Conceptos bsicos
PDO = Portable Data Objects
1. Introduccin 2. Objetos de acceso a datos (PDO) El objeto PDO El objeto PDOStatement Tratamiento de errores
Es una librera de objetos ligeros PHP que permiten acceder a bases de datos desde el cdigo PHP. PDO provee una capa de abstraccin para el acceso a datos, lo que permite que nuestro cdigo sea independiente de la BD que usemos. El objeto ms importante de PDO es precisamente PDO que representa una conexin con la BD. PDO forma parte de la distribucin PHP desde la versin v5.1
PDO PDODriver PDOException PDOStatement Parmetros
2
PDOStatement
Diseo de Amador Durn Toro, 2011 Diseo de Amador Durn Toro, 2011
Febrero 2012
Actores
Proveedor de datos (PDO Specific Driver)
1. Introduccin 2. Objetos de acceso a datos (PDO) El objeto PDO El objeto PDOStatement Tratamiento de errores
<? ?>
PDO
BD
BD2
Febrero 2012
IISSI
16/04/2012
El Objeto PDO
Este objeto representa una conexin con una base de datos, y nos permite ejecutar consultas y obtener sus resultados. <? DEBEMOS INDICAR = Su uso habitual es el siguiente: $host 'oci:dbname=localhost/XE'; EL MODO DE ERROR $username = 'username'; DE EXCEPCIONES PARA $password = 'password'; QUE LAS LANCE !!!
try { $con = new PDO($host,$username,$password); $con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); echo Conectados a la BD; // // Cerramos la conexin $con = null; } catch( PDOException $e ) {
El Objeto PDO
Mtodos de PDO
1. Introduccin 2. Objetos de acceso a datos (PDO) El objeto PDO El objeto PDOStatement Tratamiento de errores
PDO( cadenaConexin, [usuario], [pwd], [opts]): abre la conexin con la BD. La cadena de conexin depende del tipo de BD. Opcionalmente se puede indicar usuario, password y un conjunto de opciones de configuracin. beginTransaction(): comienza una transaccin. commit(): termina una transaccin. rollback(): aborta una transaccin. exec(SQL): ejecuta una instruccin SQL (INSERT, UPDATE, DELETE) y devuelve el nmero de filas afectadas. query(SQL): ejecuta una consulta SQL (SELECT) contra la BD, devuelve un objeto PDOStatement con los resultados. insertada. (Nota: este mtodo puede devolver resultados inconsistentes dependiendo del driver usado).
Diseo de Amador Durn Toro, 2011
Febrero 2012
IISSI
16/04/2012
El Objeto PDOStatement
Definicin de PDOStatement
1. Introduccin 2. Objetos de acceso a datos (PDO) El objeto PDO El objeto PDOStatement Tratamiento de errores
Representa una consulta preparada para su ejecucin en la BD y tras su ejecucin, su resultado. Su uso habitual es el siguiente:
<? try { $stmt= $con->query("SELECT " );
// o bien
$stmt = $con->prepare("SELECT WHERE a=:data"); $stmt->bindParam(':data',$name); $stmt->execute(); catch(PDOException $e ) {
Febrero 2012
El Objeto PDOStatement
Mtodos de PDOStatement
1. Introduccin 2. Objetos de acceso a datos (PDO) El objeto PDO El objeto PDOStatement Tratamiento de errores
bindParam(parmetros): asocia un valor a los parmetros establecidos en la consulta. execute(parmetros): ejecuta la consulta usando los valores introducidos en el array parmetros. rowCount(): Devuelve el nmero de filas afectadas por la consulta (no funciona en todas las BDs). columnCount():Devuelve el nmero de columnas.
<? $calories = 150; $colour = 'red'; $stmt = $con->prepare('SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour'); $stmt->execute(array(':calories' => $calories,':colour => $colour)); ?>
Febrero 2012
IISSI
16/04/2012
El Objeto PDOStatement
// $stmt es un PDOStatement ya ejecutado foreach ($stmt as $fila) { echo $fila["campo1]; echo $fila["campoN]; } ?> <? // $stmt es un PDOStatement ya ejecutado $fila = $stmt->fetch(); while ($fila) { echo $fila["campo1"]; echo $fila["campoN"]; $fila = $stmt->fetch(); } ?>
Febrero 2012
Tratamiento de Errores
Todas las operaciones con objetos PDO pueden generar excepciones que deben capturarse. El objeto que lanzan en las excepciones es de tipo PDOException, que es a su vez una subclase de Exception. Exception tiene los siguientes mtodos: getMessage(): devuelve el mensaje describe la excepcin. getFile(): fichero en que ocurri el error. getLine(): lnea en que ocurri el error. getTrace() y getTraceAsString(): devuelven la traza de ejecucin en el momento del error.
IISSI
16/04/2012
formulario
exito
s errores?
no
<% %>
Funciones gestin B
<?
func insertB(p1,p2){ var SQL = . }
Funciones gestin X
<?
func insertX(p1,p2){ var SQL = . }
?>
?>
...
?>
10
<% %>
1. Introduccin 2. Objetos de acceso a datos (PDO) El objeto PDO El objeto PDOStatement Tratamiento de errores
Rescatar los datos del formulario Anular los valores en la Session Hacer el tratamiento de los datos (p.e. insercin en la BDs)
<?php include_once(gestionUsuarios.php); $formulario = $_SESSION["formulario]; $_SESSION["formulario] = null; $_SESSION["errores] = null; ?> <html> <head> <title>Resultado del Registro</title> </head> <body> <? if(insertarUsuario(formulario[nombre], formulario[direccion]) { ?> <div id="div_exito"> <h1>Hola <?= formulario[nombre] ?>, gracias por registrarte</h1> </div> <? } else { ?> <div id=div_error_registro> Lo sentimos ya existe un usuario con su misma direccin. </div> <? } ?> <div id="div_volver"> Pulsa <a href="formulario.php">aqu</a> para volver al formulario. </div> </body> </html>
Febrero 2012
11
IISSI
16/04/2012
Funciones de Gestin de X
<%
<? /*
1. Introduccin 2. Objetos de acceso a datos (PDO) El objeto PDO El objeto PDOStatement Tratamiento de errores
Implementar la lgica de acceso a datos de la aplicacin para cada concepto del dominio: Insercin Modificacin Eliminacin Seleccin por diversos criterios.
// Insercin: function insertarUsuario($usuario, $direccion){ $resultado=true; $usuarios=usuariosporDireccion($direccion); $fila = $usuarios->fetch(); if(!$fila){ $con = new PDO("oci:dbname=localhost/XE", $username,$password); $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $con->execute("INSERT }else $resultado=false; $fila = null; $usuarios=null; return resultado; INTO Usuarios ); Este cdigo no pertenecera realmente a la lgica de acceso a datos, sino a la lgica de funcionamiento de la organizacin.
Febrero 2012
12
Normalmente, los pasos a seguir para cada funcin de la capa de acceso a datos son:
1. Introduccin 2. Objetos de acceso a datos (PDO) El objeto PDO El objeto PDOStatement Tratamiento de errores
Ejecucin del comando SQL [Opcional] Tratamiento de errores (podra ser delegado en el cdigo que llama la funcin para realizar un tratamiento ms especfico) Si abrimos la conexin debemos cerrarla Devolver los resultados si procede
Febrero 2012
13
IISSI
} // Seleccin de usuarios por distintos criterios: function usuariosporDireccion($direccion){ $con = new PDO(); $stmt = $con->prepare("SELECT * FROM Usuarios WHERE direccion=:direccion); $stmt->bindParam(:direccion,$direccion); $stmt->execute(); Duplicacin de conexin return $stmt; datos / cdigo } ?>
16/04/2012
<?php include_once(BDConexion.php);
include_once(gestionUsuarios.php); $form = $_SESSION["form]; $_SESSION["form] = null; $_SESSION["errors] = null; $conexion = conectarBD(); ?> <html> <head> <title>Resultado del Registro</title> </head> <body> <? if(crearUsuario(form[nomb],form[direccion],$conexion) { ?> <div id="div_exito"> <h1>Hola <?= form[nomb] ?>, gracias por registrarse</h1> </div> <? }else{ ?> <div id=div_error_registro> Lo sentimos, ya existe un usuario con su misma direccin, el registro como usuario fue cancelado. </div> <?}?> <div id="div_volver"> Pulse <a href="formulario.asp">aqu</a> para volver al formulario </div> </body> <? desconectarBD($conexion); ?> </html>
14
1. Introduccin 2. Objetos de acceso a datos (PDO) El objeto PDO El objeto PDOStatement Tratamiento de errores
BDConexion
<?
Gestin de X
<?
Febrero 2012
IISSI