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.
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:
-- 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
);
La operación CREATE nos permite insertar nuevos registros en la base de datos. A continuación, veremos cómo insertar un nuevo usuario:
<?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;
}
?>
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.
<?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;
}
?>
<?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;
}
?>
La operación UPDATE nos permite modificar registros existentes en la base de datos:
<?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;
}
?>
La operación DELETE nos permite eliminar registros de la base de datos:
<?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;
}
?>