En esta sección, aprenderemos cómo integrar una base de datos en nuestra aplicación web PHP. Este proceso es crucial para almacenar, recuperar y manipular datos de manera eficiente. Utilizaremos MySQL como nuestro sistema de gestión de bases de datos (DBMS) y PDO (PHP Data Objects) para la interacción con la base de datos.
Objetivos de Aprendizaje
- Conectar una aplicación PHP a una base de datos MySQL.
- Realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) utilizando PDO.
- Manejar errores y excepciones en operaciones de base de datos.
- Implementar consultas preparadas para mejorar la seguridad.
- Configuración de la Base de Datos
Creación de la Base de Datos y Tablas
Primero, necesitamos crear una base de datos y algunas tablas. Puedes hacerlo utilizando phpMyAdmin o la línea de comandos de MySQL.
CREATE DATABASE my_app; USE my_app; CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL, password VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
- Conexión a la Base de Datos
Configuración de PDO
Para conectar nuestra aplicación PHP a la base de datos MySQL, utilizaremos PDO. A continuación, se muestra cómo configurar la conexión.
<?php $host = '127.0.0.1'; $db = 'my_app'; $user = 'root'; $pass = ''; $charset = 'utf8mb4'; $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; try { $pdo = new PDO($dsn, $user, $pass, $options); echo "Conexión exitosa"; } catch (\PDOException $e) { throw new \PDOException($e->getMessage(), (int)$e->getCode()); } ?>
Explicación del Código
- $dsn: Data Source Name, contiene la información necesaria para conectarse a la base de datos.
- $options: Opciones de configuración para PDO.
- try-catch: Manejo de excepciones para capturar errores de conexión.
- Operaciones CRUD
Crear (Insertar Datos)
Para insertar datos en la tabla users
, utilizamos una consulta preparada.
<?php $sql = "INSERT INTO users (username, email, password) VALUES (:username, :email, :password)"; $stmt = $pdo->prepare($sql); $username = 'john_doe'; $email = '[email protected]'; $password = password_hash('secret', PASSWORD_DEFAULT); $stmt->execute(['username' => $username, 'email' => $email, 'password' => $password]); echo "Usuario creado exitosamente"; ?>
Leer (Seleccionar Datos)
Para leer datos de la tabla users
, utilizamos una consulta SELECT.
<?php $sql = "SELECT * FROM users WHERE email = :email"; $stmt = $pdo->prepare($sql); $email = '[email protected]'; $stmt->execute(['email' => $email]); $user = $stmt->fetch(); if ($user) { echo "Usuario encontrado: " . $user['username']; } else { echo "Usuario no encontrado"; } ?>
Actualizar Datos
Para actualizar datos en la tabla users
, utilizamos una consulta UPDATE.
<?php $sql = "UPDATE users SET username = :username WHERE email = :email"; $stmt = $pdo->prepare($sql); $newUsername = 'john_doe_updated'; $email = '[email protected]'; $stmt->execute(['username' => $newUsername, 'email' => $email]); echo "Usuario actualizado exitosamente"; ?>
Eliminar Datos
Para eliminar datos de la tabla users
, utilizamos una consulta DELETE.
<?php $sql = "DELETE FROM users WHERE email = :email"; $stmt = $pdo->prepare($sql); $email = '[email protected]'; $stmt->execute(['email' => $email]); echo "Usuario eliminado exitosamente"; ?>
- Manejo de Errores y Excepciones
Es importante manejar errores y excepciones para asegurar que nuestra aplicación sea robusta y segura.
<?php try { $stmt->execute(['email' => $email]); } catch (\PDOException $e) { echo "Error: " . $e->getMessage(); } ?>
- Consejos de Seguridad
- Consultas Preparadas: Utiliza siempre consultas preparadas para prevenir inyecciones SQL.
- Validación de Datos: Valida y sanitiza todos los datos de entrada.
- Manejo de Errores: No expongas mensajes de error detallados al usuario final.
Ejercicio Práctico
Ejercicio
- Crea una nueva tabla llamada
posts
con las siguientes columnas:id
,title
,content
,user_id
,created_at
. - Escribe un script PHP para insertar un nuevo post en la tabla
posts
. - Escribe un script PHP para leer todos los posts de la tabla
posts
. - Escribe un script PHP para actualizar el título de un post específico.
- Escribe un script PHP para eliminar un post específico.
Solución
CREATE TABLE posts ( id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, content TEXT NOT NULL, user_id INT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) );
// Insertar un nuevo post $sql = "INSERT INTO posts (title, content, user_id) VALUES (:title, :content, :user_id)"; $stmt = $pdo->prepare($sql); $title = 'Mi primer post'; $content = 'Este es el contenido de mi primer post.'; $user_id = 1; $stmt->execute(['title' => $title, 'content' => $content, 'user_id' => $user_id]); echo "Post creado exitosamente"; // Leer todos los posts $sql = "SELECT * FROM posts"; $stmt = $pdo->query($sql); $posts = $stmt->fetchAll(); foreach ($posts as $post) { echo $post['title'] . "<br>"; } // Actualizar el título de un post $sql = "UPDATE posts SET title = :title WHERE id = :id"; $stmt = $pdo->prepare($sql); $newTitle = 'Título actualizado'; $post_id = 1; $stmt->execute(['title' => $newTitle, 'id' => $post_id]); echo "Post actualizado exitosamente"; // Eliminar un post $sql = "DELETE FROM posts WHERE id = :id"; $stmt = $pdo->prepare($sql); $post_id = 1; $stmt->execute(['id' => $post_id]); echo "Post eliminado exitosamente";
Conclusión
En esta sección, hemos aprendido cómo integrar una base de datos en nuestra aplicación PHP utilizando PDO. Hemos cubierto la conexión a la base de datos, así como las operaciones CRUD básicas. Además, hemos discutido la importancia del manejo de errores y la seguridad en las consultas SQL. Con estos conocimientos, estás preparado para manejar datos de manera eficiente y segura en tus aplicaciones PHP.
Curso de Programación en PHP
Módulo 1: Introducción a PHP
- ¿Qué es PHP?
- Configuración del Entorno de Desarrollo
- Tu Primer Script en PHP
- Sintaxis y Variables en PHP
- Tipos de Datos en PHP
Módulo 2: Estructuras de Control
Módulo 3: Funciones
- Definiendo y Llamando Funciones
- Parámetros de Función y Valores de Retorno
- Ámbito de Variables
- Funciones Anónimas y Closures
Módulo 4: Arrays
Módulo 5: Trabajando con Formularios
- Manejo de Datos de Formularios
- Validación de Formularios
- Subida de Archivos
- Seguridad en Formularios
Módulo 6: Trabajando con Archivos
- Lectura y Escritura de Archivos
- Funciones de Manejo de Archivos
- Permisos de Archivos
- Funciones de Directorio
Módulo 7: Programación Orientada a Objetos (POO)
- Introducción a la POO
- Clases y Objetos
- Propiedades y Métodos
- Herencia
- Interfaces y Clases Abstractas
- Traits
Módulo 8: Trabajando con Bases de Datos
- Introducción a las Bases de Datos
- Conectando a una Base de Datos MySQL
- Realizando Operaciones CRUD
- Usando PDO para la Interacción con la Base de Datos
- Seguridad en Bases de Datos
Módulo 9: Técnicas Avanzadas de PHP
- Manejo de Errores y Excepciones
- Sesiones y Cookies
- Expresiones Regulares
- Trabajando con JSON y XML
- PHP y Servicios Web
Módulo 10: Frameworks de PHP y Mejores Prácticas
- Introducción a los Frameworks de PHP
- Empezando con Laravel
- Arquitectura MVC
- Mejores Prácticas en el Desarrollo de PHP
- Pruebas y Depuración