Você está na página 1de 8

PHP y Acceso a Datos

16/04/2012

1. Introduccin 2. Objetos de acceso a datos (PDO) El objeto PDO El objeto PDOStatement Tratamiento de errores

PHP y Acceso a Datos

3. Buenas prcticas usando PHP

Departamento de Lenguajes y Sistemas Informticos Grupo de Ingeniera del Software


Diseo de Amador Durn Toro, 2011

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.

Dependencia de las aplicaciones respecto de la BD

Para resolver estos problemas se necesitan capas de abstraccin respecto de la BD (una interfaz comn).

3. Buenas prcticas usando PHP

Febrero 2012

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

IISSI

Diseo de Amador Durn Toro, 2011

PHP y Acceso a Datos

16/04/2012

Objetos de Acceso a Datos

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

3. Buenas prcticas usando PHP

PDOStatement
Diseo de Amador Durn Toro, 2011 Diseo de Amador Durn Toro, 2011

Febrero 2012

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

Objetos de Acceso a Datos

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
<? ?>

Conexin (Objeto PDO) Base de Datos (MySQL, MS SQL Server, Oracle)


tratamiento

3. Buenas prcticas usando PHP

PDO

PDO Specific Driver PDO Specific Driver 2

BD

BD2

MS SQL MySQL Oracle

Febrero 2012

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

IISSI

PHP y Acceso a Datos

16/04/2012

El Objeto PDO

Definicin del Objeto PDO


1. Introduccin 2. Objetos de acceso a datos (PDO) El objeto PDO El objeto PDOStatement Tratamiento de errores

3. Buenas prcticas usando PHP

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

echo error de conexin: .$e->GetMessage(); } ?>


Febrero 2012

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

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

3. Buenas prcticas usando PHP

lastInsertId(): devuelve la clave primaria de la ltima fila

Febrero 2012

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

IISSI

Diseo de Amador Durn Toro, 2011

// tratamiento del error

Si no capturamos la excepcin, el servidor mostrar la traza incluyendo el usuario y password de la BD !!!

PHP y Acceso a Datos

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 " );

3. Buenas prcticas usando PHP

// o bien
$stmt = $con->prepare("SELECT WHERE a=:data"); $stmt->bindParam(':data',$name); $stmt->execute(); catch(PDOException $e ) {

// tratamiento del error


echo "error: ".$e->GetMessage(); // recorrido del PDOStatement ?>
Diseo de Amador Durn Toro, 2011 Diseo de Amador Durn Toro, 2011

Febrero 2012

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

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)); ?>

3. Buenas prcticas usando PHP

Febrero 2012

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

IISSI

PHP y Acceso a Datos

16/04/2012

El Objeto PDOStatement

Recorrido del PDOStatement (2 opciones)


<?
1. Introduccin 2. Objetos de acceso a datos (PDO) El objeto PDO El objeto PDOStatement Tratamiento de errores

// $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(); } ?>

3. Buenas prcticas usando PHP

fetch(): Devuelve la siguiente fila del resultado o false si es la ltima fila.


Diseo de Amador Durn Toro, 2011 Diseo de Amador Durn Toro, 2011

Febrero 2012

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

Tratamiento de Errores

Bloques try/catch en PHP con PDO


1. Introduccin 2. Objetos de acceso a datos (PDO) El objeto PDO El objeto PDOStatement 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.

3. Buenas prcticas usando PHP

Tratamiento del error en el bloque catch


El cdigo habitual en el bloque catch es liberar recursos y avisar al usuario del error.
Febrero 2012

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

IISSI

PHP y Acceso a Datos

16/04/2012

Buenas Prcticas usando PHP

Modularidacin del cdigo cuando se trabaja con BD:


Datos en Session
1. Introduccin 2. Objetos de acceso a datos (PDO) El objeto PDO El objeto PDOStatement Tratamiento de errores
<% %>

formulario

3. Buenas prcticas usando PHP

exito

s errores?

no
<% %>

Lgica de Acceso a Datos


Base de Datos
Febrero 2012
Funciones gestin A
<?
func insertA(p1,p2){ var SQL = . }

Funciones gestin B
<?
func insertB(p1,p2){ var SQL = . }

Funciones gestin X
<?
func insertX(p1,p2){ var SQL = . }

?>

?>

...

?>

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

10

Buenas Prcticas usando PHP


exito

<% %>

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)

3. Buenas prcticas usando PHP

<?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

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

11

IISSI

Diseo de Amador Durn Toro, 2011

Diseo de Amador Durn Toro, 2011

PHP y Acceso a Datos

16/04/2012

Funciones de Gestin de X
<%

<? /*

Buenas Prcticas usando PHP


+-------------------------------------------+ | Gestin de Usuarios | +-------------------------------------------+*/

func insertX(p1,p2){ var SQL = . } % >

1. Introduccin 2. Objetos de acceso a datos (PDO) El objeto PDO El objeto PDOStatement Tratamiento de errores

3. Buenas prcticas usando PHP

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

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

12

Buenas Prcticas usando PHP

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

Construir la sentencia SQL


[Opcional] Tratamiento y formateo de los parmetros.

Obtener una conexin. Opciones:


Creacin y apertura directamente en la funcin Obtener la conexin de los contextos de Sesin o Aplicacin Tratar la conexin como parmetro de cada funcin

3. Buenas prcticas usando PHP

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

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

13

IISSI

Diseo de Amador Durn Toro, 2011

Diseo de Amador Durn Toro, 2011

} // 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 } ?>

PHP y Acceso a Datos

16/04/2012

<?php include_once(BDConexion.php);

Buenas Prcticas usando 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
<?

func conectarBD() { return $dbh;} func desconectarBD() { }


? >

3. Buenas prcticas usando PHP

Gestin de X
<?

func insertX($p1){ $dbh-> . } ? >

Febrero 2012

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

IISSI

Diseo de Amador Durn Toro, 2011

Você também pode gostar