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!