Publicado el 7 de Agosto del 2018
739 visualizaciones desde el 7 de Agosto del 2018
348,0 KB
8 paginas
Creado hace 9a (11/02/2015)
PHP y Acceso a Datos
11/02/2015
1. Introducción
2. Objetos de
acceso a datos
(PDO):
• El objeto PDO
• El objeto
PDOStatement
• Tratamiento
de errores
3. Buenas
prácticas
usando PHP
1. Introducción
2. Objetos de
acceso a datos
(PDO):
• El objeto PDO
• El objeto
PDOStatement
• Tratamiento
de errores
3. Buenas
prácticas
usando PHP
PHP y Acceso a Datos
Departamento de Lenguajes y Sistemas Informáticos
Grupo de Ingeniería del Software
Introducción
• SQL es el lenguaje común para trabajar con todas las BD
•
Las interfaces que los programadores usan para trabajar con
BDs varían mucho
Dependencia de las
aplicaciones respecto de la BD
•
Para resolver estos problemas se necesitan capas de
abstracción respecto de la BD (una interfaz común)
Introducción a la Ingeniería del Software y a los Sistemas de Información
1
1
1
1
1
0
0
2
2
,
,
o
o
r
r
o
o
T
T
n
n
á
á
r
r
u
u
D
D
r
r
o
o
d
d
a
a
m
m
A
A
e
e
d
d
o
o
ñ
ñ
e
e
s
s
i
i
D
D
©
©
1
1
0
2
,
o
r
o
T
n
á
r
u
D
r
o
d
a
m
A
e
d
o
ñ
e
s
i
D
©
IISSI
1
PHP y Acceso a Datos
11/02/2015
1. Introducción
2. Objetos de
acceso a datos
(PDO):
• El objeto PDO
• El objeto
PDOStatement
• Tratamiento
de errores
3. Buenas
prácticas
usando PHP
Objetos de Acceso a Datos
• Conceptos básicos:
– PDO = Portable Data Objects
– Es una librería proporcionada por PHP que permite acceder
a diferentes bases de datos, ¿cómo?
– PDO provee una capa de abstracción para el acceso a
datos, lo que permite que nuestro código sea
independiente de la BD que usemos
– El objeto más importante de PDO es precisamente PDO
que representa una conexión con la BD
– PDO forma parte de la distribución PHP desde la versión
v5.1
PDO
PDOStatement
PDODriver
PDOStatement
PDOException
Parámetros
Introducción a la Ingeniería del Software y a los Sistemas de Información
2
1. Introducción
2. Objetos de
acceso a datos
(PDO):
• El objeto PDO
• El objeto
PDOStatement
• Tratamiento
de errores
3. Buenas
prácticas
usando PHP
Objetos de Acceso a Datos
• Actores:
– Proveedor de datos (PDO Specific Driver)
– Conexión (Objeto PDO)
– Base de Datos (MySQL, MS SQL Server, Oracle)
tratamiento
<?
?>
PDO
PDO
Specific
Driver
PDO
Specific
Driver 2
BD
BD2
MS SQL
MySQL
Oracle
Introducción a la Ingeniería del Software y a los Sistemas de Información
3
1
1
0
2
,
o
r
o
T
n
á
r
u
D
r
o
d
a
m
A
e
d
o
ñ
e
s
i
D
©
1
1
0
2
,
o
r
o
T
n
á
r
u
D
r
o
d
a
m
A
e
d
o
ñ
e
s
i
D
©
IISSI
2
PHP y Acceso a Datos
11/02/2015
El Objeto PDO
• Definición del Objeto PDO:
1. Introducción
2. Objetos de
acceso a datos
(PDO):
• El objeto PDO
• El objeto
PDOStatement
• Tratamiento
de errores
3. Buenas
prácticas
usando PHP
– Este objeto representa una conexión con una base de
datos, y nos permite ejecutar consultas y obtener sus
resultados
– Su uso habitual es el siguiente:
<?
$host = 'oci:dbname=localhost/XE';
$username = 'username';
$password = 'password';
try {
¡¡¡ DEBEMOS INDICAR
EL MODO DE ERROR
DE EXCEPCIONES PARA
QUE LAS LANCE !!!
$con = new PDO($host,$username,$password);
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo ’Conectados a la BD’;
// Alguna operación sobre la BD
// Cerramos la conexión
$con = null;
}
catch( PDOException $e ) {
// tratamiento del error
echo “error de conexión: “ . $e->GetMessage();
Si no capturamos la
excepción, el servidor
mostrará la traza
¡¡¡ incluyendo el usuario
y password de la BD !!!
}
?>
Introducción a la Ingeniería del Software y a los Sistemas de Información
4
1. Introducción
2. Objetos de
acceso a datos
(PDO):
• El objeto PDO
• El objeto
PDOStatement
• Tratamiento
de errores
3. Buenas
prácticas
usando PHP
El Objeto PDO
• Métodos de PDO:
– PDO( cadenaConexión, [usuario], [pwd], [opts]): abre la
conexión con la BD:
• La cadena de conexión depende del tipo de BD
• Entre las opciones de configuración, podemos hacer
persistente la conexión:
$con = new PDO($host,$user,$pass,
array(PDO::ATTR_PERSISTENT => true));
– exec(SQL): ejecuta una instrucción SQL (INSERT, UPDATE,
DELETE) y devuelve el número de filas afectadas
– query(SQL): ejecuta una consulta SQL (“SELECT…”) y
devuelve un objeto PDOStatement con los resultados
– prepare(SQL): prepara una consulta SQL (“SELECT…”) y
devuelve un objeto PDOStatement para su posterior
ejecución
Introducción a la Ingeniería del Software y a los Sistemas de Información
5
1
1
0
2
,
o
r
o
T
n
á
r
u
D
r
o
d
a
m
A
e
d
o
ñ
e
s
i
D
©
1
1
0
2
,
o
r
o
T
n
á
r
u
D
r
o
d
a
m
A
e
d
o
ñ
e
s
i
D
©
IISSI
3
PHP y Acceso a Datos
11/02/2015
1. Introducción
2. Objetos de
acceso a datos
(PDO):
• El objeto PDO
• El objeto
PDOStatement
• Tratamiento
de errores
3. Buenas
prácticas
usando PHP
El Objeto PDOStatement
• Definición de PDOStatement:
– Representa una sentencia preparada para su ejecución
en la BD y tras su ejecución, el conjunto de resultados
asociado. Hay dos alternativas: Query y Prepare
<?
try {
// Se ejecuta directamente la consulta y devuelve resultados
$stmt= $con->query("SELECT …" );
catch(PDOException $e ) {// Tratamiento del error}
?>
<?
try {
// Preparar la consulta si se va a repetir múltples veces
$stmt = $con->prepare("SELECT … WHERE a=:data");
$stmt->bindParam(':data',$name);
$stmt->execute();
catch(PDOException $e ) {
// tratamiento del error
echo "error: “ . $e->GetMessage();
}
?>
Introducción a la Ingeniería del Software y a los Sistemas de Información
6
El Objeto PDOStatement
• Métodos de PDOStatement:
– bindParam(parámetros): asocia un valor a los parámetros
establecidos en la consulta
– execute(parámetros): ejecuta la consulta preparada usando
los valores introducidos en el array parámetros
– rowCount(): Devuelve el número de filas afectadas por la
consulta (no funciona en todas las BDs)
– columnCount(): Devuelve el número de columnas
1. Introducción
2. Objetos de
acceso a datos
(PDO):
• El objeto PDO
• El objeto
PDOStatement
• Tratamiento
de errores
3. Buenas
prácticas
usando PHP
<?
$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));
?>
Introducción a la Ingeniería del Software y a los Sistemas de Información
7
1
1
0
2
,
o
r
o
T
n
á
r
u
D
r
o
d
a
m
A
e
d
o
ñ
e
s
i
D
©
1
1
0
2
,
o
r
o
T
n
á
r
u
D
r
o
d
a
m
A
e
d
o
ñ
e
s
i
D
©
IISSI
4
PHP y Acceso a Datos
11/02/2015
El Objeto PDOStatement
• Recorrido del PDOStatement (2 opciones):
<?
// $stmtes un PDOStatementya ejecutado
foreach ($stmt as $fila) {
echo $fila["campo1”];
…
echo $fila["campoN”];
1. Introducción
2. Objetos de
acceso a datos
(PDO):
• El objeto PDO
• El objeto
PDOStatement
• Tratamiento
de errores
3. Buenas
prácticas
usando PHP
}
?>
}
?>
<?
// $stmtes un PDOStatementya ejecutado
$fila = $stmt->fetch();
while ($fila) {
echo $fila["campo1"];
…
echo $fila["campoN"];
$fila = $stmt->fetch();
fetch(): Devuelve la
siguiente fila del resultado
o false si es la última fila.
Introducción a la Ingeniería del Software y a los Sistemas de Información
8
1. Introducción
2. Objetos de
acceso a datos
(PDO):
• El objeto PDO
• El objeto
PDOStatement
• Tratamiento
de errores
3. Buenas
prácticas
usando PHP
Tratamiento de Errores
• Bloques try/catch en PHP con PDO:
– 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 métodos:
• getMessage(): devuelve el mensaje describe la
excepción
• getFile(): fichero en que ocurrió el error
• getLine(): línea en que ocurrió el error
• getTrace() y getTraceAsString(): devuelven la traza de
ejecución en el momento del error
• Tratamiento del error en el bloque catch:
– El código habitual en el bloque catch es liberar recursos y
avisar al usuario del error
Introducción a la Ingeniería del Software y a los Sistemas de Información
9
1
1
0
2
,
o
r
o
T
n
á
r
u
D
r
o
d
a
m
A
e
d
o
ñ
e
s
i
D
©
1
1
0
2
,
o
r
o
T
n
á
r
u
D
r
o
d
a
m
A
e
d
o
ñ
e
s
i
D
©
IISSI
5
PHP y Acceso a Datos
11/02/2015
Buenas Prácticas usando PHP
• Modularidación del código cuando se
trabaja con BD:
Datos en Session
1. Introducción
2. Objetos de
acceso a datos
(PDO):
• El objeto PDO
• El objeto
PDOStatement
• Tratamiento
de errores
3. Buenas
prácticas
usando PHP
formulario
<%
%>
sí
¿errores?
no
exito
<%
%>
Lógica de Acceso a Datos
Base
de
Datos
Datos
Funciones
gestión “A”
<?
func insertA(p1,p2){
var SQL =“…”
….
}
…
?>
Funciones
gestión “B”
<?
func insertB(p1,p2){
var SQL =“…”
….
}
…
?>
Funciones
gestión “X”
<?
func insertX(p1,p2){
var SQL =“…”
….
}
…
?>
. . .
Introducción a la Ingeniería del Software y a los Sistemas de Información
10
Buenas Prácticas usando PHP
1. Introducción
2. Objetos de
acceso a datos
(PDO):
• El objeto PDO
• El objeto
PDOStatement
• Tratamiento
de errores
3. Buenas
prácticas
usando PHP
exito
<%
%>
gestiónBD
< ?
func conectarBD() {
…
return $dbh;}
func desconectarBD() {
…}
?
>
Gestión de “X”
< ?
func insertX($p1){
$dbh->…
….
}
…
? >
session_start();
include_once(“gestionBD.php”);
include_once(“gestionUsuarios.php”);
if (isset ($_SESSION[“formulario”]) {
$formulario = $_SESSION["formulario“];
unset ($_SESSION["formulario”]);
unset ($_SESSION["errores”]);
}
else Header("Location:formulario.php");
$conexion = conectarBD();
<?php
?>
<html>
<head> <title>Resultado del Registro</title></head>
<body><? if ( insertarUsuario($formulario[“nombre”],
$formulario[“direccion”], $conexion) {
?>
<div id="div_exito">
<h1>Ho
Comentarios de: Tema 06 - PHP y Acceso a Datos (0)
No hay comentarios