Este es un sistema completo para gestionar usuarios con:
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"); } ?>
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']); } } ?>
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']); } ?>
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']); } } ?>
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']); } ?>