CRUD Completo con PHP PDO

📚 ¿Qué contiene este CRUD?

Este es un sistema completo para gestionar usuarios con:

conexion.php
 PDO::ERRMODE_EXCEPTION, // Manejo de errores
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Resultados como array asociativo
            PDO::ATTR_EMULATE_PREPARES => false // Prepared statements reales
        ]
    );
    
    // Crear tabla si no existe
    $sql = "CREATE TABLE IF NOT EXISTS usuarios (
        id INT AUTO_INCREMENT PRIMARY KEY,
        nombre VARCHAR(100) NOT NULL,
        email VARCHAR(255) NOT NULL UNIQUE,
        fecha_registro DATETIME DEFAULT CURRENT_TIMESTAMP
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4";
    
    $conn->exec($sql);
    
} catch(PDOException $e) {
    error_log("Error de conexión: " . $e->getMessage());
    die("Error al conectar con la base de datos");
}
?>
insertar.php
 false, 'message' => 'Método no permitido']);
    exit;
}

// Sanitizar inputs
$nombre = filter_input(INPUT_POST, 'nombre', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);

// Validaciones básicas
if (empty($nombre) || empty($email)) {
    echo json_encode(['success' => false, 'message' => 'Todos los campos son obligatorios']);
    exit;
}

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo json_encode(['success' => false, 'message' => 'Email no válido']);
    exit;
}

try {
    // Prepared statement para prevenir inyección SQL
    $stmt = $conn->prepare("INSERT INTO usuarios (nombre, email) VALUES (?, ?)");
    $stmt->execute([$nombre, $email]);
    
    echo json_encode([
        'success' => true,
        'message' => 'Usuario creado correctamente',
        'id' => $conn->lastInsertId()
    ]);
    
} catch(PDOException $e) {
    // Error de duplicado de email
    if ($e->getCode() == 23000) {
        echo json_encode(['success' => false, 'message' => 'El email ya está registrado']);
    } else {
        error_log("Error al insertar: " . $e->getMessage());
        echo json_encode(['success' => false, 'message' => 'Error al crear usuario']);
    }
}
?>
consultar.php
query("SELECT * FROM usuarios ORDER BY fecha_registro DESC");
    $usuarios = $stmt->fetchAll();
    
    echo json_encode(['success' => true, 'usuarios' => $usuarios]);
    
} catch(PDOException $e) {
    error_log("Error al consultar: " . $e->getMessage());
    echo json_encode(['success' => false, 'message' => 'Error al obtener usuarios']);
}
?>
actualizar.php
 false, 'message' => 'Método no permitido']);
    exit;
}

// Sanitizar y validar ID
$id = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT);
if (!$id) {
    echo json_encode(['success' => false, 'message' => 'ID inválido']);
    exit;
}

// Sanitizar inputs
$nombre = filter_input(INPUT_POST, 'nombre', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);

// Validaciones
if (empty($nombre) || empty($email)) {
    echo json_encode(['success' => false, 'message' => 'Todos los campos son obligatorios']);
    exit;
}

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo json_encode(['success' => false, 'message' => 'Email no válido']);
    exit;
}

try {
    // Verificar que el usuario existe
    $stmt = $conn->prepare("SELECT id FROM usuarios WHERE id = ?");
    $stmt->execute([$id]);
    
    if (!$stmt->fetch()) {
        echo json_encode(['success' => false, 'message' => 'Usuario no encontrado']);
        exit;
    }
    
    // Actualizar con prepared statement
    $stmt = $conn->prepare("UPDATE usuarios SET nombre = ?, email = ? WHERE id = ?");
    $stmt->execute([$nombre, $email, $id]);
    
    echo json_encode(['success' => true, 'message' => 'Usuario actualizado']);
    
} catch(PDOException $e) {
    // Error de duplicado de email
    if ($e->getCode() == 23000) {
        echo json_encode(['success' => false, 'message' => 'El email ya está registrado']);
    } else {
        error_log("Error al actualizar: " . $e->getMessage());
        echo json_encode(['success' => false, 'message' => 'Error al actualizar usuario']);
    }
}
?>
eliminar.php
 false, 'message' => 'Método no permitido']);
    exit;
}

// Sanitizar y validar ID
$id = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT);
if (!$id) {
    echo json_encode(['success' => false, 'message' => 'ID inválido']);
    exit;
}

try {
    // Verificar que el usuario existe
    $stmt = $conn->prepare("SELECT id FROM usuarios WHERE id = ?");
    $stmt->execute([$id]);
    
    if (!$stmt->fetch()) {
        echo json_encode(['success' => false, 'message' => 'Usuario no encontrado']);
        exit;
    }
    
    // Eliminar con prepared statement
    $stmt = $conn->prepare("DELETE FROM usuarios WHERE id = ?");
    $stmt->execute([$id]);
    
    echo json_encode(['success' => true, 'message' => 'Usuario eliminado']);
    
} catch(PDOException $e) {
    error_log("Error al eliminar: " . $e->getMessage());
    echo json_encode(['success' => false, 'message' => 'Error al eliminar usuario']);
}
?>
☰   UF2215-Contenidos