Web Semántica de la teoría a la práctica: lecciones aprendidas en ambientes p...
IW-UTXX: Programación web en PHP con bases de datos
1. Implantación de
Aplicaciones Web
UT 4: Programación web en PHP
con acceso a bases de datos.
CFGS «Administración de Sistemas
Informáticos en Red»
CIFP Juan de Colonia (Burgos)
David H. Martín Alonso
– Curso 2012/2013 –
2. Proyecto ARCE
David H. Martín Alonso
IES José Luis Sampedro
CIFP Juan de Colonia
Tres Cantos (Madrid)
Burgos
José Luis Rodríguez Rodríguez Víctor Cabezas Pozo
IES Jacarandá IES Conselleria
Brenes (Sevilla) Valencia
Red profesional colaborativa del ciclo
«Administración de Sistemas Informáticos en Red»
3. PHP Y BASES DE DATOS.
Contenidos
Internacionalización, localización
Programación orientada a objetos
Documentación
Acceso a bases de datos con PDO
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
4. PHP Y BASES DE DATOS
Internacionalización, localización
Red profesional colaborativa del ciclo
«Administración de Sistemas Informáticos en Red»
5. PHP Y BASES DE DATOS.
Programación orientada a objetos
ASCII
CP 850
Win-1252
ISO-8859-1
Unicode
UTF-8
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
6. PHP Y BASES DE DATOS.
i18n – UTF8
■ i18n + L10n Internacionalización (i18n) y localización (L10n)
□ POO
□ Documentación i + 18 letras + n L + 10 letras + n
□ Bases de Datos • Soporte de idiomas
– Codificaciones de caracteres diversas
– Traducción de interfaces de usuario
6/52
• Requisito para las aplicaciones web
– Por dimensión internacional de la WWW
– Por variedad de codificaciones en los sistemas operativos
• Necesidad de coherencia entre aplicaciones
– Navegador – PHP – Base de datos
• Propuesta: uso generalizado de UTF-8
– Contenido HTTP
– Codificación HTML
– Texto recogido en formularios
– Almacenamiento de variables en PHP
– Funciones alternativas de tratamiento de cadenas en PHP
– Definición de bases de datos
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
7. PHP Y BASES DE DATOS.
¿Cómo usar PHP con UTF8?
■ i18n + L10n • Cadenas de texto en codificaciones multibyte: mbstring
□ POO – Las funciones originales son para codificaciones de 8 bits
□ Documentación
□ Bases de Datos
– Objetivo de mejora en PHP6
• PHP:
– La codificación interna es ISO-8859-1. La cambiamos:
mb_internal_encoding( 'UTF-8' );
7/52 – Usamos las funciones alternativas de «mbstring»
Ej.: strlen () → mb_strlen()
• HTTP
header( 'Content-Type: text/html; charset=UTF-8' );
• HTML
– Aunque se prima la cabecera HTTP, lo pondremos también
<meta charset="utf-8">
• Formularios:
– Los navegadores respetarán la codificación de HTML
• MySQL
CREATE nombre_bd DEFAULT CHARACTER SET utf8;
SET NAMES utf8;
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
8. PHP Y BASES DE DATOS.
Actividad I: mbstring
Ordenar en PHP un array de textos «difíciles» como
puede ser {'paño', 'palo', 'pato'… }. Será necesario
controlar correctamente el uso de cadenas multibyte
en codificación UTF-8 y la localización española.
Se pueden emplear para ello las siguientes
funciones:
mb_internal_encoding
setlocale
asort
mb_strlen
mb_convert_encoding
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
9. PHP Y BASES DE DATOS.
Actividad II: Unicode en MySQL
Buscar la base de datos «World», base de datos de
ejemplo distribuida para MySQL. Adaptar el archivo
para que la base de datos se almacene
correctamente en UTF-8 y que las tablas empleen el
orden ortográfico estándar de Unicode.
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
10. PHP Y BASES DE DATOS.
L10n
■ i18n + L10n • Identificación y ajuste al idioma de usuario
□ POO – Textos de la interfaz de usuario
□ Documentación
□ Bases de Datos
– Formatos de fecha y otros
– Ordenación de cadenas respetando alfabetos nacionales
• Traducciones
– Identificación y cambio de localización
10/52 setlocale(LC_ALL, 'es_ES.UTF8');
– Incorporar traducciones del idioma deseado → array
– Acceso a TODOS los textos: array + claves
printf($text['Suma de %d y %d'], $a, $b);
– Evitar el operador de concatenación «.»
El orden lo marca el traductor, NO el programador.
– Deberíamos escribir el propio código en inglés... ¿no?
• Presencia en el código
– Ordenación
asort($lista, SORT_LOCALE_STRING);
– Fechas en cadenas de texto
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
11. PHP Y BASES DE DATOS.
Actividad III: traducciones
Localizar los archivos de traducción de Joomla,
observarlos, revisarlos, retocarlos.
• En versiones anteriores de Joomla
encontrábamos dos paquetes de traducciones:
uno «recomendado» y el otro en JoomlaSpanish
incompleto.
Observar la presencia abundante de cadenas de
formato de tipo «printf» y recordar su conveniencia
frente al operador «.» de concatenación de cadenas.
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
12. PHP Y BASES DE DATOS
Introducción a la
Programación Orientada a Objetos
Red profesional colaborativa del ciclo
«Administración de Sistemas Informáticos en Red»
13. PHP Y BASES DE DATOS.
Programación orientada a objetos
□ i18n + L10n Programación orientada a objetos (OOP, POO)
■ POO
□ Documentación
□ Bases de Datos
Forma o «paradigma» de programación
• Antecedentes: programación procedimental, modular,
13/52
orientada a procesos
– El código actúa sobre los datos
• Programación orientada a objetos
– El programa se organiza en torno a los datos
– Conserva estilo: programación estructurada, modular
Objeto: datos + «sus» procedimientos
– Abstracción del mundo real
– Propiedades encapsuladas, privadas, protegidas
Símil: tarjetas inteligentes vs. tarjetas magnéticas
• Clases: tipo, plantilla para replicar objetos
– Jerarquía de herencia. Perfeccionamiento progresivo.
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
14. PHP Y BASES DE DATOS.
POO: beneficios
□ i18n + L10n
■ POO
□ Documentación
□ Bases de Datos
Beneficios de la POO: €
• Calidad:
– robustez del código / reducción de errores € €
• Reutilización de código
14/52
• Facilidad de mantenimiento
• Consecuencia: reducción de costes globales
• Gestión de elementos con mucha variedad
Entornos gráficos de usuario
• Incorporado a todos los lenguajes modernos
$ $
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
15. PHP Y BASES DE DATOS.
POO: Objetos
□ i18n + L10n • Tipo compuesto: abstracción, estructura con datos y
■ POO
operaciones
□ Documentación
□ Bases de Datos
– Datos, atributos, variables → Estado
– Operaciones, funciones, métodos → Comportamiento
Principios de la POO:
15/52 • Encapsulación, ocultamiento
– Datos afines se mantienen de forma conjunta y privada
– Los procedimientos ligados a esos datos también
– Los cambios están controlados
– Acceso a través de una interfaz de métodos públicos
• Herencia
– Clases: definición de tipos de objetos
– Objetos: múltiples instancias de esas clases
– Podemos derivar otras clases con funcionalidades añadidas
• Polimorfismo
– Una misma acción puede tomar distintas formas en los
descendientes
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
16. PHP Y BASES DE DATOS.
POO: Historia
□ i18n + L10n • 1967: Simula
■ POO
□ Documentación • '70: Smalltalk
□ Bases de Datos • 1983: C++
• 1985: Eiffel
• 1995: Java
16/52
• 2001: C# (plataforma .NET)
• Incorporado en los lenguajes modernos
– Perl, PHP, Python
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
17. PHP Y BASES DE DATOS.
POO: Lenguajes
□ i18n + L10n • C++
■ POO – Lenguaje compilado, alto rendimiento
□ Documentación
□ Bases de Datos
– Ámbito: programación de sistemas
• Java, C#
– Lenguajes de propósito general
– Ámbito: programación de aplicaciones locales y web
17/52
– Basados en máquina virtual: compilación + traducción
• PHP
– Lenguaje de propósito general
– Lenguaje interpretado, de scripts, portable
– Ámbito: muy popular en programación para la web
– Soporte en evolución, estable en PHP versión 5
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
18. PHP Y BASES DE DATOS.
POO: Diseño con UML
□ i18n + L10n • Lenguaje Unificado de Modelado
■ POO – Unified Modelling Language (UML)
□ Documentación
□ Bases de Datos
– Herramienta gráfica de diseño para OO
– Describe diversos tipos de diagramas
Los diagramas de clase permiten representar
18/52 • Jerarquía de clases / interfaces
• Elementos
– Atributos, tipos y ámbitos
– Métodos y sus parámetros formales
– Asociaciones
[TUML]
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
19. PHP Y BASES DE DATOS.
Programación orientada a objetos
POO
UML
Clases
Objetos
Atributos
Métodos
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
20. PHP Y BASES DE DATOS.
Clases en PHP
□ i18n + L10n • Código relacionado con clases y objetos ¿dónde?
■ POO
En bloques <?php?>, intercalado
□ Documentación
□ Bases de Datos include o require para incorporar todas las partes
– Definición de las clases
Recomendable, no obligatorio, usar 1 archivo × 1 clase
No se ejecuta hasta ser requerido por algún objeto
20/52 – Instanciación y manipulación de objetos
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
21. PHP Y BASES DE DATOS.
Definición de las clases
□ i18n + L10n • Declaración: class EjemploTipo {…}
■ POO
□ Documentación
– Identificador con estilo CamelCase
□ Bases de Datos Mayúsculas como separadores de palabras
– Nombre de archivo ≈ nombre de la clase
– Definición recogida entre las llaves
• Atributos: variables que representan estado
21/52
– Al comienzo de la clase
– En PHP no se requiere prefijar el tipo de dato
– Con modificadores de acceso: público/privado
– Probablemente privados, para evitar acceso externo directo
Métodos __get y __set para acceder a ellos
• Métodos: código que implementa capacidades
– Funciones
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
22. PHP Y BASES DE DATOS.
Sintaxis esencial
□ i18n + L10n • Declaración de clases:
■ POO class HMundo {…};
□ Documentación
…o con herencia
□ Bases de Datos
class HMundo extends Saludo {…};
• Declaración de atributos:
public $datoVulnerable;
private $nombrePropio;
22/52
• Declaración de métodos:
public function sumaPareja($a, $b) {…};
…o para el constructor inicial
public function __construct(…) {…};
• Acceso interno a atributos:
$this->telefonoMovil
…en PHP SÍ es obligatorio siempre poner $this
• Instanciación de objetos:
$bienvenida=new HMundo('Pepe');
• Acceso externo a métodos:
$bienvenida->saludar();
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
23. PHP Y BASES DE DATOS.
POO en PHP: Ejemplo I
#!/usr/bin/php -f (1) Comienzo de bloque PHP
<?php (2) Declaración de la clase
class HolaMundo {
(3) Declaración de atributos
private $nombre;
(4) Constructor de la clase
public function __construct($nombre) {
$this->nombre=$nombre;
} (6) Acceso a los atributos del objeto
(5) Definición de método
public function saluda() {
$mensaje=sprintf("¡Hola %s!",$this->nombre);
return $mensaje;
}
} (7) Instanciación de objeto
$objeto=new HolaMundo('David');
printf("%sn",$objeto->saluda());
?>
(8) Acceso a método
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
24. PHP Y BASES DE DATOS.
POO en PHP
class
new
__construct
public / private / protected
get / set
→
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
25. PHP Y BASES DE DATOS.
Visibilidad
□ i18n + L10n • private
■ POO – Acceso privado, solo desde métodos de la propia clase.
□ Documentación
□ Bases de Datos
– Uso: habitualmente los atributos serán todos privados.
– Uso: cierto métodos reservados para uso interno.
• public
– Acceso público, desde cualquier parte del código.
25/52
– Uso: conjunto seleccionado de métodos visibles.
• protected
– Acceso protegido, desde métodos de clases descendientes.
– Uso: limitado, acceso entre métodos y atributos emparentados
• Propiedades: atributos «virtuales»
– Acceso externo como atributos públicos.
– Virtualidad gestionada por «métodos mágicos»
__set() y __get()
– Adquirido de C#
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
26. PHP Y BASES DE DATOS.
POO avanzado
□ i18n + L10n • Interfaces: como clases, pero sin código
■ POO – Métodos declarados, pero sin implementar
□ Documentación
□ Bases de Datos
– Se requiere de una clase derivada para crear objetos
– Permiten herencia múltiple
interface iRedondo {…};
class Esfera implements iRedondo {…};
$bola=new Esfera();
26/52
– Métodos y clases abstractas: solo parcialmente incompletas
abstract class AMedias {
abstract protected function pendiente();
…}
• Elementos estáticos
– Comunes para toda la clase: variables, constantes y métodos.
– Accesibles sin necesidad de instanciar ningún objeto
• Operador de acceso «::»
– Acceso a elementos de clase, análogo a «→»
• Métodos mágicos
– Nombres reservados para usos especiales
– __construct, __set, __get …
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
27. PHP Y BASES DE DATOS.
Excepciones
□ i18n + L10n • Excepciones: objetos para gestión de errores
■ POO – Se «lanzan» cuando se produce una situación que impide
□ Documentación
completar un método.
□ Bases de Datos
– Se interrumpe la ejecución del método y se vuelve al método
llamante. En éste se repite la misma situación y la excepción
se va transfiriendo a medida que subimos por la «pila» de
funciones.
27/52
– Código mínimo. Sólo nombre y jerarquía para identificarlas.
• Se pueden «capturar»: bloques try-catch
– Se interrumpe la propagación de la excepción.
– Se ejecuta el bloque «catch» donde se analizar la situación.
Ejecutar el código (try) y si salta una excepción que
queramos capturar (catch) derivar a ese bloque.
– Tres opciones:
Burocrática: avisar y continuar. Mala idea generalmente.
Reintento: revisar los parámetros y repetir.
Propagación: lanzar otra excepción y seguir la cadena.
– Plan: propagar hacia arriba hasta que el método responsable
del dato la capture y tome otras acciones.
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
28. PHP Y BASES DE DATOS
Documentación en PHP: Doxygen
Red profesional colaborativa del ciclo
«Administración de Sistemas Informáticos en Red»
29. PHP Y BASES DE DATOS.
Documentación: Finalidad
□ i18n + L10n Finalidad de la documentación
□ POO
■ Documentación • Intercambio de conocimiento acerca de la aplicación y
□ Bases de Datos su desarrollo
• Aprovechamiento óptimo de la funcionalidad
programada
29/52
Calidad → Reducción de costes €
• Costes de desarrollo
–
–
Adecuación a las especificaciones
Reutilización de código
€ €
– Reducción de errores, reducción del esfuerzo de reparación
– Reducción del esfuerzo de adaptación y mejora
• Costes de explotación
–
–
Tiempo de aprendizaje
Uso eficiente
$ $
– Reducción de errores de uso
• Supone un coste inicial amortizado inmediatamente
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
30. PHP Y BASES DE DATOS.
Documentación: Etapas
□ i18n + L10n • Distintas metodologías de desarrollo concretan
□ POO
distintos modelos
■ Documentación
□ Bases de Datos • Análisis y desarrollo
– Ordinogramas, pseudocódigo (Prog. estructurada)
– UML , diagramas de clases (Prog. Orientada a Objetos)
– Diagramas entidad-relación (Bases de Datos)
• Codificación
30/52
– Paradigmas: modular, estructurado, orientado a objetos
– Identificadores
– Comentarios en línea
Entre el código, aspectos no obvios del algoritmo
– Comentarios formales
Niveles: archivos, clases, funciones, parámetros
• Puesta en producción
– Manual de programador
– Manual de administrador
– Manual de usuario
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
31. PHP Y BASES DE DATOS.
Documentación de código
□ i18n + L10n • La falta de claridad en el código limita seriamente el
□ POO
desarrollo
■ Documentación
□ Bases de Datos
– El esfuerzo de programación crece exponencialmente
• La programación estructurada emplea patrones
conocidos
– Fácil comprensión
31/52
– Fácil adaptación
– Importancia de espaciado y sangrado
• Los identificadores facilitan la lectura y la comprensión
– Nombres significativos
– Importancia de evitar nombres crípticos
– Diferentes convenios asociados históricamente con cada
lenguaje
• Comentarios intercalados
– Para explicar procesos complicados
– NO sustituyen ni a la claridad, ni a la sencillez ni a los
identificadores
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
32. PHP Y BASES DE DATOS.
Documentación de interfaz
□ i18n + L10n Comentarios a nivel de módulos
□ POO
■ Documentación • Funciones, ficheros, clases. Identifican el módulo.
□ Bases de Datos • Informan de su funcionalidad y condiciones de uso
– Interfaz. Modelo de «caja negra».
• Simultáneos a la codificación, si no previos
32/52 – Ayuda del propio programador
– Perdida de utilidad y de contenido si se hacen en diferido
Formatos predeterminados
– Establecidos por la organización o comunidad de
programadores
– Propuestos por el lenguaje en lenguajes OO como Java o C#
(.NET)
– Determinados por las herramientas
Procesados con generadores de documentación
– Generación automática en formatos múltiples
– A partir de los comentarios en el propio código
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
33. PHP Y BASES DE DATOS.
El formato «Javadoc» (I)
□ i18n + L10n • Java: lenguaje de programación orientado a objetos
□ POO
– Origen 1990 (Sun Microsystems)
■ Documentación
□ Bases de Datos
– Inspirado en C y C++
– Interpretado, multiplataforma
– Lenguaje POO de propósito general popular y referente.
33/52
Javadoc:
• Herramienta de generación de documentación para
Java
– Parte del entorno de desarrollo básico (Java Development Kit,
JDK)
– A partir de comentarios en el código genera HTML (páginas
web)
– Uniformidad de estilo de TODA la documentación de Java
– Mecanismo de comunicación universal → Reutilización
• Objetivo: documentar elementos reutilizables
– Paquetes, clases, métodos, parámetros, atributos
– Documentación de la interfaz para poder reutilizar clases
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
34. PHP Y BASES DE DATOS.
El formato «Javadoc» (II)
Compatible C/Java/PHP, pero con dos **
/** Punto en un espacio 2D.
* @author <a href="mailto:profe@cesbur">Profe de PLE</a>
*/ Identificación
public class Punto { Formatos HTML
Hiperenlaces a código
/** Crea un {@link Punto} a partir de sus coordenadas.
* @param cartesianas true para cartesianas, false para angulares
* @param a abscisa o módulo
* @param b ordenada o argumento
*/
public Punto(boolean cartesianas, double a, double b) {
...
} Descripción de la funcionalidad
Palabras clave, con @
/** Realiza un desplazamiento horizontal.
* @param dx desplazamiento Parámetros necesarios
* @return la abscisa tras el desplazamiento
*/ Resultados
public void moverX(double dx) {
...
return x;
}
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
35. PHP Y BASES DE DATOS.
Ejemplo PHP: tablero.php
<?php
/** @file tablero.php Conversión de coordenadas de ajedrez. */
/** Tamaño del tablero */
define('DIM', 8);
$letras = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');
$numeros = array(1, 2, 3, 4, 5, 6, 7, 8);
/**
* Facilita las coordenadas en el tablero de ajedrez.
* a1 es la celda inferior izquierda negra.
* @param fila_tabla número de fila, con 0 para la fila superior
* @param columna_tabla numero de columna, con 0 a la izquierda
* @return el texto correspondiente
*/
function celda($fila_tabla, $columna_tabla) {
return celda_a_letra($fila_tabla, $columna_tabla) .
celda_a_numero($fila_tabla, $columna_tabla);
}
...
?>
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
36. PHP Y BASES DE DATOS.
Doxygen
□ i18n + L10n • Generador de documentación libre GPL/GNU
□ POO
– Multiplataforma: GNU/Linux, MAC OS X, MS Windows
■ Documentación
□ Bases de Datos
– Aplicable a C, C++, Java, C#, PHP, Python y alguno más
– Compatible con Javadoc, requiere algún ajuste para C o PHP
– Genera ficheros HTML, pero también RTF y LATEX
• Operación:
36/52
– Descarga e instalación
En Linux está disponible en las distribuciones habituales
DOS: Descargar, descomprimir y agregar al PATH. También
hay instalador.
– En el directorio de código fuente crear el fichero de
configuración
doxygen -g → Doxyfile
Recomendable crear directorios separados: src, bin y docs
– Editar el fichero Doxyfile a gusto con un editor de texto
– Ejecutando nuevamente doxygen se generan los documentos
Genera avisos si encuentra código no documentado
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
37. PHP Y BASES DE DATOS.
Doxyfile: sugerencias
□ i18n + L10n – PROJECT_NAME = "Ejemplos OO-PHP"
□ POO – PROJECT_NUMBER = 1.0
■ Documentación – OUTPUT_DIRECTORY = docs
□ Bases de Datos
– OUTPUT_LANGUAGE = Spanish
– JAVADOC_AUTOBRIEF = YES
– RECURSIVE = YES
37/52
– EXTRACT_ALL, EXTRACT_PRIVATE, EXTRACT_STATIC
– SOURCE_BROWSER, GENERATE_TREEVIEW = YES
– HAVE_DOT, UML_LOOK = YES
– GENERATE_LATEX = NO
• No genera nada hasta que no se documentan los
ficheros
– Etiqueta @file al frente de los ficheros deseados
– Descripción delante de cada clase, método o función
– Descripción de funciones incluyendo @param y @return
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
38. PHP Y BASES DE DATOS.
Reglas de estilo
□ i18n + L10n Nuestro objetivo es documentar la funcionalidad
□ POO
■ Documentación de las funciones: el QUÉ, no CÓMO
□ Bases de Datos • Texto concreto y conciso
• Evitar calcar el identificador, sino darle más sentido
• No repetir contexto: «Función que..»
38/52
• Comenzar con verbo en tercera persona de singular
• La primera frase va a los índices: ser muy concretos
– Hasta el primer punto '.' y espacio
(para no cortar direcciones de correo)
– Podemos ampliar la explicación en oraciones sucesivas, pero
teniendo en cuenta que tampoco se busca explicar aquí el
algoritmo: el código debe ser autoexplicativo.
• No olvidar los comportamientos excepcionales y
errores tratados por la función
• Debe ser un reflejo de las especificaciones
– Anticipo del diseño de pruebas unitarias de caja negra
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
39. PHP Y BASES DE DATOS.
Etiquetas Javadoc / Doxygen
□ i18n + L10n • Delimitación de comentarios: /** */
□ POO
■ Documentación • Descripciones: texto.
□ Bases de Datos – Permiten HTML básico para formato.
• Parámetros de funciones: @param identificador
• Valor devuelto: @return (sin identificador)
39/52
• Enlaces internos:
– En bloque:
@see funcion() / @see #identificador
– En línea:
{@link funcion()} / {@link #identificador}
Entre llaves; se pueden intercalar en cualquier texto
• Identificación:
@author nombre / @version numero
• Ficheros (en Doxygen):
@file nombre.ext Contenido
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
40. PHP Y BASES DE DATOS.
Doxygen: instalación
□ i18n + L10n GNU Linux / Ubuntu
□ POO
■ Documentación
– Fácil: gestor de paquetes, buscar Doxygen
□ Bases de Datos – Opcionalmente instalar Graphviz (dot, genera gráficos)
– Acceso por consola de texto
$> doxygen
40/52
MS Windows
• Descargar y descomprimir Doxygen + Graphviz
– Evitar los instaladores si es posible
– Elegir nombres de directorios cortos, sin espacios
• Ejecutar desde una consola de texto
– Agregar a PATH
• Sugerencia:
– Hacer copia de la «consola de sistema»
– Asociar un archivo de comandos: /k archivo.cmd
– Configurar PATH y mode en el archivo (windows-1252)
– Cambiar tipo de letra: Lucida Console
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
41. PHP Y BASES DE DATOS.
PHP + Doxygen en MS Windows (I)
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
42. PHP Y BASES DE DATOS.
PHP + Doxygen en MS Windows (II)
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
43. PHP Y BASES DE DATOS
Acceso a bases de datos con PDO
Red profesional colaborativa del ciclo
«Administración de Sistemas Informáticos en Red»
44. PHP Y BASES DE DATOS.
PHP Data Objects (PDO)
□ i18n + L10n • Extensión de PHP para acceso a bases de datos.
□ POO
□ Documentación • Capa de abstracción, independiente del SGBD.
■ Bases de Datos – Interface común, parámetros ajustables.
– Funcionalidad dependiente del SGBD.
Abstracción en el acceso, no en la base de datos.
– Requiere activar la extensión pdo_xxxx del gestor, en php.ini
44/52
Verificable con phpinfo()
• A partir de PHP 5.1
Wez Furlong, Message Systems
– Previamente se empleaban extensiones particulares.
– Siguen operativas y en uso.
• Tecnología orientada a objetos
– Tres clases
PDO – Base de datos
PDOStatement – Resultados
PDOException – Incidencias
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
45. PHP Y BASES DE DATOS.
PDO I: Conexión y desconexión
□ i18n + L10n • Conexión = creación del objeto
□ POO
– Instancia de la case PDO.
□ Documentación
■ Bases de Datos
– Los datos de conexión van en los parámetros al constructor.
• Los errores generan excepciones.
– La descripción del error va en el texto de la excepción.
+ Códigos de error ANSI SQLSTATE
45/52
– Se debe capturar con una estructura try-catch.
• Desconexión automática
– Al anular la referencia al objeto.
(1) Instanciación del objeto
try {
$db = new PDO($dsn, $user, $password, $options);
(3) Vigilando la excepción
} catch (PDOException $e) {
die ("Failed to connect: " . $e->getMessage());
}
… (4) Mensaje del error
$db=NULL; (2) Anular y cerrar
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
46. PHP Y BASES DE DATOS.
PDO II: Consultas
□ i18n + L10n Dos estrategias:
□ POO
□ Documentación • Consulta directa, sin preparación
■ Bases de Datos – Consulta de datos: devuelve PDOStatement o FALSE.
$consulta=$db->query($sql);
– Otras sentencias: devuelve número de filas afectadas o 0.
$n=$db->exec($sql);
46/52 – PROTEGER ANTES de comillas y caracteres especiales
$sql=$db->quote($texto);
– Se recomienda evitarlas en favor de consultas preparadas.
• Consulta con preparación
– Optimiza para consultas reutilizables con parámetros.
– El uso de parámetros protege de inyecciones SQL.
$consulta=$db->prepare($sql_p);
$consulta->execute(array(…));
Los parámetros se incorporan en la consulta original
como «?» o como «:clave» según el array a usar
– PDO::prepare() devuelve también PDOStatement.
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
47. PHP Y BASES DE DATOS.
Ejemplo PHP: consulta MySQL
require_once('conf/config.php');
$sql_p = 'select Name,Code from Country where name like ?';
try {
// Conexión
$fuente = sprintf('mysql:host=%s;dbname=%s', DBHOST, DBNAME);
$basededatos = new PDO($fuente, DBUSER, DBPASSWORD);
$basededatos->exec('set names utf8');
// Consulta
$consulta = $basededatos->prepare($sql_p);
$consulta->execute(array('S%n'));
$resultados = $consulta->fetchAll(); // acceso con buffer
// Procesado
$nelementos = count($resultados);
foreach ($resultados as $fila) {
printf("%s - %sn", $fila['Code'], $fila['Name']);
}
} catch (PDOException $e) { // Errores
printf('Error en base de datos: %s', $e->getMessage());
}
$basededatos = NULL; //Cierre
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
48. PHP Y BASES DE DATOS.
PDO III: Consultas y resultados
□ i18n + L10n Resultados: proceso de PDOStatement
□ POO
□ Documentación
– Las consultas devuelven objetos PDOStatement.
■ Bases de Datos – En caso de consultas preparadas hay que ejecutarlas.
– Finalmente se recogen o analizan los resultados.
• Lectura de TODA la tabla resultante
– Desaconsejable en consultas voluminosas
48/52
$resultados=$consulta->fetchAll();
• Lectura por filas/tuplas una a una
while (Sfila=$consulta->fetch()) {…};
Acabar o cerrar con closeCursor() antes de otra consulta.
• Número de filas/tuplas afectadas
$n=$consulta->rowCount();
– Para INSERT, DELETE, UPDATE. Informan del acierto o no.
– Con SELECT depende de la base de datos: no hay garantía.
• Se puede recorrer directamente con «foreach».
Gracias a que implementa la interface Traversable.
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
49. PHP Y BASES DE DATOS.
Ejemplo PHP: entrada
require_once('conf/config.php');
$sql_p = 'update Access set User=?';
try {
// Conexión
$fuente = sprintf('mysql:host=%s;dbname=%s', DBHOST, DBNAME);
$basededatos = new PDO($fuente, DBUSER, DBPASSWORD);
$basededatos->exec('set names utf8');
// Consulta
$consulta = $basededatos->prepare($sql_p);
$resultado = $consulta->execute(array('ASIR2012'));
// Procesado
$mensaje = ($resultado) ? "SÍ" : "NO";
printf("Actualización %s realizadan", $mensaje);
} catch (PDOException $e) { // Errores
printf('Error en base de datos: %s', $e->getMessage());
}
$basededatos = NULL; //Cierre
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
50. PHP Y BASES DE DATOS.
Referencias
Sintes, B. (2011, IES Abastos). Páginas web con PHP
http://www.mclibre.org/consultar/php/
Simpson, A. (WebCollab, consulta 12/2011) PHP and UTF-8 Howto
http://webcollab.sourceforge.net/unicode.html
PHP (The PHP Group, consulta 12/2011) PHP Manual – Clases y
objetos
http://www.php.net/manual/es/oop5.intro.php
Salinas, P. (Univ. Chile, consulta 12/2011) Tutorial de UML – Modelo
de clases
http://www.dcc.uchile.cl/~psalinas/uml/modelo.html
Furlong, W. (Message Systems, consulta 1/2012) PHP Data Objects
http://www.slideshare.net/wezfurlong/php-data-objects
Bibliografía actualizada en delicious:
http://www.delicious.com/dhmartin/IW-ASIR
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
51. PHP Y BASES DE DATOS.
Licencia
Este material está disponible bajo una Licencia Creative Commons,
http://creativecommons.org/licenses/by-nc-sa/3.0/es/
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
52. PHP Y BASES DE DATOS.
¿Dudas o cuestiones?
Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»