Bases de Datos

Operaciones CRUD con PHP y MySQL

Objetivos de Aprendizaje
  • Entender qué son las operaciones CRUD y su importancia
  • Implementar operaciones de Crear (Create) registros en MySQL desde PHP
  • Implementar operaciones de Leer (Read) registros en MySQL desde PHP
  • Implementar operaciones de Actualizar (Update) registros en MySQL desde PHP
  • Implementar operaciones de Eliminar (Delete) registros en MySQL desde PHP
  • Crear un sistema CRUD completo y funcional

¿Qué son las Operaciones CRUD?

CRUD es un acrónimo que representa las cuatro operaciones básicas que se realizan en aplicaciones persistentes de base de datos:

Operación Descripción SQL HTTP
Create Crear o añadir nuevos registros INSERT POST
Read Leer o recuperar datos existentes SELECT GET
Update Actualizar o modificar datos existentes UPDATE PUT/PATCH
Delete Eliminar o borrar datos existentes DELETE DELETE

Estas operaciones son fundamentales en cualquier aplicación que trabaje con bases de datos, desde un simple blog hasta complejos sistemas de gestión empresarial.

Estructura de Base de Datos para Ejemplos

Antes de empezar con las operaciones CRUD, crearemos una base de datos y tabla simple para nuestros ejemplos. Usaremos una tabla de usuarios con los siguientes campos:

creacion_db.sql

-- Crear la base de datos
CREATE DATABASE IF NOT EXISTS tutorial_php;

-- Usar la base de datos
USE tutorial_php;

-- Crear la tabla usuarios
CREATE TABLE IF NOT EXISTS usuarios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE,
    telefono VARCHAR(15),
    fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Debes ejecutar este código SQL en tu sistema de gestión de bases de datos MySQL (como phpMyAdmin) antes de probar los ejemplos siguientes.

1. Crear (Create) - Insertando Registros

La operación CREATE nos permite insertar nuevos registros en la base de datos. A continuación, veremos cómo insertar un nuevo usuario:

crear_usuario.php

<?php
// Conexión a la base de datos usando PDO
$host = "localhost";
$dbname = "tutorial_php";
$username = "root";
$password = "";

try {
    // Crear conexión PDO
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    
    // Configurar PDO para mostrar errores
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    // Datos del formulario
    $nombre = "Juan Pérez";
    $email = "juan@example.com";
    $telefono = "1234567890";
    
    // Preparar la consulta SQL con PDO
    $stmt = $pdo->prepare("INSERT INTO usuarios (nombre, email, telefono) VALUES (?, ?, ?)");
    
    // Ejecutar la consulta con los parámetros
    $stmt->execute([$nombre, $email, $telefono]);
    
    // Obtener el ID del último registro insertado
    $lastId = $pdo->lastInsertId();
    
    echo "Usuario creado correctamente. ID: " . $lastId;
    
} catch(PDOException $e) {
    // Manejar errores de base de datos
    echo "Error: " . $e->getMessage();
} finally {
    // Cerrar la conexión y liberar recursos
    $pdo = null;
    $stmt = null;
}
?>

2. Leer (Read) - Consultando Registros

La operación READ nos permite recuperar registros de la base de datos. Veremos dos ejemplos: leer todos los registros y leer un registro específico.

listar_usuarios.php

<?php
// Conexión a la base de datos usando PDO
$host = "localhost";
$dbname = "tutorial_php";
$username = "root";
$password = "";

try {
    // Crear conexión PDO
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    
    // Configurar PDO para mostrar errores
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    // Consulta SQL
    $sql = "SELECT id, nombre, email, telefono, fecha_registro FROM usuarios";
    
    // Preparar y ejecutar la consulta
    $stmt = $pdo->query($sql);
    
    // Verificar si hay resultados
    if ($stmt->rowCount() > 0) {
        echo "<table border='1'>";
        echo "<tr><th>ID</th><th>Nombre</th><th>Email</th><th>Teléfono</th><th>Fecha Registro</th></tr>";
        
        // Mostrar datos de cada fila usando fetchAll con PDO::FETCH_ASSOC
        foreach($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
            echo "<tr><td>" . $row["id"] . "</td><td>" . $row["nombre"] . "</td><td>" . 
                 $row["email"] . "</td><td>" . $row["telefono"] . "</td><td>" . $row["fecha_registro"] . "</td></tr>";
        }
        echo "</table>";
    } else {
        echo "0 resultados";
    }
    
} catch(PDOException $e) {
    // Manejar errores de base de datos
    echo "Error: " . $e->getMessage();
} finally {
    // Cerrar la conexión y liberar recursos
    $pdo = null;
    $stmt = null;
}
?>
leer_usuario.php

<?php
// Conexión a la base de datos usando PDO
$host = "localhost";
$dbname = "tutorial_php";
$username = "root";
$password = "";

try {
    // Crear conexión PDO
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    
    // Configurar PDO para mostrar errores
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    // ID del usuario a leer
    $id = 1;
    
    // Preparar la consulta SQL con PDO
    $stmt = $pdo->prepare("SELECT id, nombre, email, telefono, fecha_registro FROM usuarios WHERE id = ?");
    
    // Ejecutar la consulta con los parámetros
    $stmt->execute([$id]);
    
    // Verificar si hay resultados
    if ($stmt->rowCount() > 0) {
        $row = $stmt->fetch(PDO::FETCH_ASSOC);
        echo "ID: " . $row["id"] . "<br>";
        echo "Nombre: " . $row["nombre"] . "<br>";
        echo "Email: " . $row["email"] . "<br>";
        echo "Teléfono: " . $row["telefono"] . "<br>";
        echo "Fecha Registro: " . $row["fecha_registro"] . "<br>";
    } else {
        echo "No se encontró el usuario.";
    }
    
} catch(PDOException $e) {
    // Manejar errores de base de datos
    echo "Error: " . $e->getMessage();
} finally {
    // Cerrar la conexión y liberar recursos
    $pdo = null;
    $stmt = null;
}
?>

3. Actualizar (Update) - Modificando Registros

La operación UPDATE nos permite modificar registros existentes en la base de datos:

actualizar_usuario.php

<?php
// Conexión a la base de datos usando PDO
$host = "localhost";
$dbname = "tutorial_php";
$username = "root";
$password = "";

try {
    // Crear conexión PDO
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    
    // Configurar PDO para mostrar errores
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    // Datos a actualizar
    $id = 1;
    $nombre = "Juan Pérez Actualizado";
    $telefono = "9876543210";
    
    // Preparar la consulta SQL con PDO
    $stmt = $pdo->prepare("UPDATE usuarios SET nombre = ?, telefono = ? WHERE id = ?");
    
    // Ejecutar la consulta con los parámetros
    $stmt->execute([$nombre, $telefono, $id]);
    
    // Obtener el número de filas afectadas
    $rowCount = $stmt->rowCount();
    
    echo "Usuario actualizado correctamente. Filas afectadas: " . $rowCount;
    
} catch(PDOException $e) {
    // Manejar errores de base de datos
    echo "Error: " . $e->getMessage();
} finally {
    // Cerrar la conexión y liberar recursos
    $pdo = null;
    $stmt = null;
}
?>

4. Eliminar (Delete) - Borrando Registros

La operación DELETE nos permite eliminar registros de la base de datos:

eliminar_usuario.php

<?php
// Conexión a la base de datos usando PDO
$host = "localhost";
$dbname = "tutorial_php";
$username = "root";
$password = "";

try {
    // Crear conexión PDO
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    
    // Configurar PDO para mostrar errores
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    // ID del usuario a eliminar
    $id = 1;
    
    // Preparar la consulta SQL con PDO
    $stmt = $pdo->prepare("DELETE FROM usuarios WHERE id = ?");
    
    // Ejecutar la consulta con los parámetros
    $stmt->execute([$id]);
    
    // Obtener el número de filas afectadas
    $rowCount = $stmt->rowCount();
    
    echo "Usuario eliminado correctamente. Filas afectadas: " . $rowCount;
    
} catch(PDOException $e) {
    // Manejar errores de base de datos
    echo "Error: " . $e->getMessage();
} finally {
    // Cerrar la conexión y liberar recursos
    $pdo = null;
    $stmt = null;
}
?>