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.

  1. 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
);

  1. 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.

  1. 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";
?>

  1. 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();
}
?>

  1. 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

  1. Crea una nueva tabla llamada posts con las siguientes columnas: id, title, content, user_id, created_at.
  2. Escribe un script PHP para insertar un nuevo post en la tabla posts.
  3. Escribe un script PHP para leer todos los posts de la tabla posts.
  4. Escribe un script PHP para actualizar el título de un post específico.
  5. 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

Módulo 2: Estructuras de Control

Módulo 3: Funciones

Módulo 4: Arrays

Módulo 5: Trabajando con Formularios

Módulo 6: Trabajando con Archivos

Módulo 7: Programación Orientada a Objetos (POO)

Módulo 8: Trabajando con Bases de Datos

Módulo 9: Técnicas Avanzadas de PHP

Módulo 10: Frameworks de PHP y Mejores Prácticas

Módulo 11: Proyecto: Construyendo una Aplicación Web

© Copyright 2024. Todos los derechos reservados