READ en un CRUD con PHP y MySQL: listar empleados y crear un buscador eficiente 🔎
Después de crear registros en la base de datos, el siguiente paso lógico en cualquier CRUD es poder verlos y buscarlos.
Esta operación se conoce como:
READ (leer o listar datos)
En este paso vamos a:
- Listar empleados desde la base de datos.
- Ordenarlos correctamente.
- Crear un buscador por múltiples campos.
- Limitar resultados para mejorar el rendimiento.
Todo usando PDO y consultas preparadas.
¿Qué hace la operación READ?
La operación READ permite:
- Consultar los datos almacenados.
- Mostrarlos al usuario.
- Filtrar resultados.
- Ordenarlos.
Es la base de cualquier sistema:
- Panel de administración
- Sistema de tickets
- Inventarios
- Usuarios
- Pedidos
Sin READ, no hay interfaz funcional.
1. Consulta básica para listar empleados
En tu CRUD, el listado se obtiene con esta lógica:
$stmt = $pdo->prepare("SELECT * FROM empleados ORDER BY nombres ASC LIMIT 200");
$stmt->execute();
$empleados = $stmt->fetchAll();
Qué hace esta consulta
SELECT *→ trae todas las columnas.FROM empleados→ de la tabla empleados.ORDER BY nombres ASC→ ordena alfabéticamente.LIMIT 200→ máximo 200 resultados.
Esto evita que el sistema intente cargar miles de registros al mismo tiempo.
2. Por qué es importante ordenar los resultados
Sin un ORDER BY, la base de datos puede devolver los registros:
- En orden aleatorio.
- Según el último cambio.
- Según el almacenamiento interno.
Con:
ORDER BY nombres ASC
Los empleados se muestran:
- De la A a la Z.
- Más fácil de leer.
- Más intuitivo para el usuario.
3. Implementar un buscador por varios campos
Tu CRUD incluye un buscador con el parámetro q.
$q = trim($_GET['q'] ?? '');
Esto captura el texto de búsqueda.
4. Construir la consulta dinámica con WHERE
Si el usuario escribe algo, se activa la búsqueda:
$params = [];
$where = "";
if ($q !== '') {
$where = "WHERE codigo LIKE :q OR nombres LIKE :q OR puesto LIKE :q OR telefono LIKE :q";
$params[':q'] = "%" . $q . "%";
}
Qué significa esto
Se buscará coincidencia parcial en:
codigonombrespuestotelefono
El % en SQL significa:
“Cualquier texto antes o después”.
Por ejemplo:
Buscar:
ana
Coincidirá con:
- Ana
- Mariana
- Santana
5. Consulta final con buscador incluido
Luego se arma la consulta completa:
$stmt = $pdo->prepare("SELECT * FROM empleados $where ORDER BY nombres ASC LIMIT 200");
$stmt->execute($params);
$empleados = $stmt->fetchAll();
Esto permite:
- Listar todo si no hay búsqueda.
- Filtrar si el usuario escribe algo.
Todo con consultas preparadas y seguras.
6. Formulario del buscador
En la interfaz, el buscador es un formulario GET:
<form method="GET"> <input type="text" name="q" placeholder="Buscar..."> <button type="submit">Buscar</button> </form>
Esto genera una URL como:
crud-caso-de-estudio.php?q=ana
Ventajas de usar GET:
- La búsqueda queda en la URL.
- Se puede compartir el enlace.
- Se puede recargar sin perder el filtro.
7. Mostrar los resultados en una tabla
Después de obtener los datos:
foreach ($empleados as $emp) {
echo $emp['nombres'];
}
En tu caso, los muestras en una tabla Bootstrap con:
- Código
- Nombre
- Puesto
- Teléfono
- Estado
- Acciones
Esto convierte la consulta en una interfaz usable.
8. Límite de resultados: una práctica importante
Tu consulta usa:
LIMIT 200
Esto es muy importante.
¿Por qué?
Si la tabla tiene:
- 1,000 registros
- 10,000 registros
- 100,000 registros
Una consulta sin límite puede:
- Consumir más memoria.
- Hacer la página lenta.
- Saturar el servidor.
El LIMIT protege el rendimiento.
- Este post te puede ayudar si aun no conoces bien LIMIT
9. Flujo completo de la operación READ
Así funciona el proceso:
- Usuario entra al CRUD.
- Se ejecuta SELECT.
- Se listan empleados ordenados.
- Usuario escribe en el buscador.
- Se agrega el WHERE.
- Se muestran resultados filtrados.
Todo sin recargar la lógica del sistema.
10. Errores comunes al hacer un READ
No usar consultas preparadas
Ejemplo inseguro:
$sql = "SELECT * FROM empleados WHERE nombres LIKE '%$q%'";
Esto puede permitir inyección SQL.
No usar LIMIT
Puede causar:
- Páginas lentas.
- Uso excesivo de memoria.
No ordenar resultados
Hace que la tabla:
- Se vea desordenada.
- Sea difícil de usar.
Mejora futura: paginación
Si el sistema crece, puedes reemplazar:
LIMIT 200
Por:
LIMIT 20 OFFSET 0
Y crear paginación real.
Pero para este caso de estudio, el límite fijo es suficiente.
Conclusión
La operación READ convierte un simple CRUD en un sistema usable.
En este paso:
- Listamos empleados.
- Los ordenamos correctamente.
- Implementamos un buscador por varios campos.
- Protegimos el rendimiento con LIMIT.
Esto hace que el sistema sea rápido, claro y funcional.
En el siguiente paso veremos:
➡️ UPDATE: cómo editar empleados de forma segura con PDO