php-como-crear-un-crud-con-php-y-pdo

Cómo crear un CRUD con PHP y PDO

  • 2 min

CRUD es el conjunto de operaciones para crear, leer, actualizar y borrar datos de una aplicación.

Vamos a ver cómo implementar cada una usando PDO y Sentencias Preparadas para garantizar la seguridad.

Imaginemos que gestionamos una tabla de productos con los campos: id, nombre, precio.

C - create (insertar datos)

Para guardar información nueva. Usamos la sentencia SQL INSERT.

function crearProducto($pdo, $nombre, $precio) {
    try {
        // 1. Preparamos la plantilla con marcadores
        $sql = "INSERT INTO productos (nombre, precio) VALUES (:nombre, :precio)";
        $stmt = $pdo->prepare($sql);

        // 2. Ejecutamos pasando los valores
        $stmt->execute([
            'nombre' => $nombre,
            'precio' => $precio
        ]);

        // lastInsertId() es muy útil: nos devuelve el ID autonumérico generado
        return $pdo->lastInsertId();

    } catch (PDOException $e) {
        return "Error al crear: " . $e->getMessage();
    }
}

// Uso:
$nuevoId = crearProducto($pdo, "Teclado Mecánico", 59.99);
echo "Producto creado con ID: " . $nuevoId;
Copied!

R - read (leer datos)

Para mostrar la información. Puede ser leer todo el listado o leer un solo elemento.

A. Leer todos (Listado):

function obtenerProductos($pdo) {
    // Como no hay variables externas, podemos usar query() directo
    $stmt = $pdo->query("SELECT * FROM productos");
    
    // Devolvemos todos los resultados como un array asociativo
    return $stmt->fetchAll();
}
Copied!

B. Leer uno solo (Detalle):

function obtenerProductoPorId($pdo, $id) {
    $sql = "SELECT * FROM productos WHERE id = :id";
    $stmt = $pdo->prepare($sql);
    $stmt->execute(['id' => $id]);
    
    // Usamos fetch() porque solo esperamos una fila
    return $stmt->fetch();
}
Copied!

U - update (actualizar datos)

Para modificar registros existentes. La cláusula WHERE limita qué filas cambian y evita actualizar toda la tabla por error.

function actualizarPrecio($pdo, $id, $nuevoPrecio) {
    try {
        $sql = "UPDATE productos SET precio = :precio WHERE id = :id";
        $stmt = $pdo->prepare($sql);
        
        $stmt->execute([
            'precio' => $nuevoPrecio,
            'id'     => $id
        ]);
        
        // rowCount() nos dice cuántas filas fueron afectadas
        // Si devuelve 0, significa que el ID no existía o el precio era el mismo
        return $stmt->rowCount();

    } catch (PDOException $e) {
        return "Error al actualizar: " . $e->getMessage();
    }
}

// Uso: Cambiamos el precio del producto 5 a 45.00
$filas = actualizarPrecio($pdo, 5, 45.00);
echo "Se actualizaron $filas productos.";
Copied!

D - delete (borrar datos)

Para eliminar registros. Al igual que en el Update, el WHERE es obligatorio para evitar desastres.

function borrarProducto($pdo, $id) {
    try {
        $sql = "DELETE FROM productos WHERE id = :id";
        $stmt = $pdo->prepare($sql);
        
        $stmt->execute(['id' => $id]);
        
        if ($stmt->rowCount() > 0) {
            return true; // Borrado exitoso
        } else {
            return false; // No se encontró ese ID
        }

    } catch (PDOException $e) {
        return "Error al borrar: " . $e->getMessage();
    }
}
Copied!