UD 4 Acceso a Datos
RA 6 Desarrolla aplicaciones web de acceso a almacenes de datos, aplicando medidas para mantener la seguridad y la integridad de la información.
- a) Se han analizado las tecnologías que permiten el acceso mediante programación a la información disponible en almacenes de datos.
- b) Se han creado aplicaciones que establezcan conexiones con bases de datos.
- c) Se ha recuperado información almacenada en bases de datos.
- d) Se ha publicado en aplicaciones web la información recuperada.
Tras el punto anterior y este, cabe destacar que las clases mysqli
y PDO
(PHP Data Objects) son las dos formas principales de interactuar con bases de datos en PHP. Ambas permiten realizar operaciones como conectarse a una base de datos, ejecutar consultas SQL, y manejar resultados, pero tienen diferencias significativas en cuanto a capacidades y flexibilidad.
PDO
(PHP Data Objects)
La clase PDO
es una interfaz más genérica que soporta múltiples tipos de bases de datos, no solo MySQL. Es ideal para proyectos que pueden necesitar trabajar con bases de datos diferentes, como PostgreSQL, SQLite, Oracle, etc.
Características:
- Es independiente del motor de base de datos: Cambiar de base de datos es más sencillo.
- Soporte para consultas preparadas y transacciones.
- Proporciona una API orientada a objetos.
- Menor dependencia de funciones específicas de un motor de base de datos.
Comparativa mysqli
y PDO
Característica | mysqli |
PDO |
---|---|---|
Compatibilidad de bases de datos | Solo MySQL | Varias (MySQL, PostgreSQL, SQLite, etc.) |
Estilo de programación | Procedural y orientado a objetos | Orientado a objetos |
Consultas preparadas | Sí | Sí |
Transacciones | Sí | Sí |
Facilidad para cambiar de BD | Baja | Alta |
API simplificada | No | Sí |
¿Cuál elegir?
-
Usar
mysqli
si: -
Tu aplicación está diseñada exclusivamente para trabajar con MySQL.
- Necesitas usar funcionalidades específicas de MySQL.
-
Usar
PDO
si: -
Tu proyecto necesita flexibilidad para trabajar con múltiples bases de datos.
- Prefieres una API más simple y orientada a objetos.
Note
Ambas clases son herramientas poderosas, pero la elección depende de los requisitos del proyecto. Para proyectos nuevos,
PDO
suele ser preferible por su flexibilidad y soporte más amplio.
Base de datos
Vamos a hacer uso de la base de datos dwes y tabla persona que realizamos la actividad anterior para crear ahora una conexión con la base de datos haciendo uso de la clase PDO.
ConexionPDO.php
- Crea un archivo llamado
conexionPDO.php
en el directorio UD4/2PDO/
Código para la conexión:
<?php
/**
* Conexión a una base de datos utilizando la clase PDO en PHP
* BD persona, Tabla dwes
*/
try {
// 1. CONEXIÓN CON LA BASE DE DATOS
// Configuración de los parámetros de conexión: servidor, base de datos, usuario y contraseña
$dsn = "mysql:host=localhost;dbname=dwes;charset=utf8"; // Data Source Name
$username = "root";
$password = "";
// Crear instancia PDO
$conexion = new PDO($dsn, $username, $password);
// Configuramos el manejo de errores para que lance excepciones
$conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Conexión exitosa.<br>";
} catch (PDOException $e) {
// Capturamos errores de conexión
echo "<br>Se ha producido un error: " . $e->getMessage();
exit();
}
try {
// 2. CONSULTA A LA BASE DE DATOS
// Definimos la consulta SQL
$consulta = "SELECT * FROM `persona`";
// Preparamos la consulta (opcional pero recomendado con PDO)
$stmt = $conexion->prepare($consulta);
// Ejecutamos la consulta
$stmt->execute();
// 3. RECUPERAMOS LOS RESULTADOS
// Verificamos si hay resultados
if ($stmt->rowCount() > 0) {
//OPCIÓN WHILE Recorremos LÍNEA A LÍNEA los resultados como un array asociativo
/*while ($usuario = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "
ID: {$usuario['id']}<br>
Nombre: {$usuario['nombre']}<br>
Apellidos: {$usuario['apellidos']}<br>
Teléfono: {$usuario['telefono']}<br>
<hr>
";
}*/
// OPCIÓN FOREACH con FETCHALL RECORREMOS CADA RESULTADO QUE NOS DEVUELVE EL SERVIDOR
$usuarios = $stmt->fetchALL(PDO::FETCH_ASSOC);
//print_r($usuarios);
foreach ($usuarios as $usuario) {
echo "
ID: {$usuario['id']}<br>
Nombre: {$usuario['nombre']}<br>
Apellidos: {$usuario['apellidos']}<br>
Teléfono: {$usuario['telefono']}<br>
<hr>
";
}
} else {
echo "No se encontraron registros.<br>";
}
} catch (PDOException $e) {
// Capturamos errores durante la ejecución de la consulta
echo "<br>Error al realizar la consulta: " . $e->getMessage();
}
// 4. CERRAMOS LA CONEXIÓN (opcional en PDO, ya que se maneja automáticamente)
$conexion = null;
?>
Actividades
Prueba PDO
Investiga el ejemplo anterior y realiza una segunda versión del mismo script pero leyendo línea a línea con bucle WHILE y fijándote en el uso defetch en lugar de fetchALL , haz alguna prueba más para comprenderlo mejor en la carpeta 2PDO
ProyectoUD4-PDO
La idea de esta unidad es aplicar las nuevas características adquiridas en un proyecto haciendo uso de la clase PDO para para accedera una base de datos.
Tienes la info en la sección "Actividad entregable"