Crear un buscador interno sigue siendo una de las funciones más útiles en cualquier sitio web con artículos, productos o documentos. Sin embargo, muchos ejemplos que circulan en internet todavía usan código obsoleto o inseguro.
Esta versión actualizada te muestra cómo implementar un buscador simple, seguro y eficiente usando PDO, consultas preparadas y buenas prácticas actuales.
Formulario HTML para enviar la búsqueda
<form action="buscar.php" method="GET">
<input type="text" name="palabra" placeholder="Buscar..." required>
<button type="submit">Buscar</button>
</form>
Puntos clave:
method="GET"permite compartir o guardar la URL con la búsqueda.requiredevita envíos vacíos.- El placeholder guía al usuario.
Conexión segura con PDO
<?php
$dsn = "mysql:host=localhost;dbname=nombre_BBDD;charset=utf8mb4";
$usuario = "usuario";
$contrasena = "contraseña";
try {
$pdo = new PDO($dsn, $usuario, $contrasena, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
} catch (PDOException $e) {
die("Error de conexión: " . $e->getMessage());
}
?>
Ventajas:
- Manejo de errores profesional
- Compatibilidad con PHP 8+
- Seguridad mejorada
Consulta preparada para evitar inyección SQL
<?php
$palabra = $_GET['palabra'] ?? '';
$sql = "SELECT * FROM documentos WHERE documento LIKE :busqueda";
$stmt = $pdo->prepare($sql);
$stmt->execute(['busqueda' => "%$palabra%"]);
$resultados = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
Por qué funciona:
:busquedaevita inyecciones SQLLIKEpermite coincidencias parcialesfetchAllfacilita recorrer resultados
Mostrar los resultados de forma limpia
<?php if ($resultados): ?>
<h2>Resultados para: "<?php echo htmlspecialchars($palabra); ?>"</h2>
<ul>
<?php foreach ($resultados as $fila): ?>
<li><?php echo htmlspecialchars($fila['documento']); ?></li>
<?php endforeach; ?>
</ul>
<?php else: ?>
<p>No se encontraron coincidencias.</p>
<?php endif; ?>
Buenas prácticas aplicadas:
htmlspecialcharsevita XSS- Listas limpias y semánticas
- Mensaje claro cuando no hay resultados
Mejoras recomendadas para un buscador más potente
- Búsqueda por múltiples columnas
Ej.: título, descripción, etiquetas. - Paginación
Evita cargar cientos de resultados de golpe. - Índices FULLTEXT
Mucho más rápido en tablas grandes. - Resaltado de coincidencias
Marca la palabra encontrada dentro del texto. - Historial de búsquedas populares
Útil para UX y SEO interno. - Normalización de texto
Quitar acentos para mejorar coincidencias. - Límites de resultados
Evita sobrecargar el servidor.
Por qué este enfoque sigue siendo útil hoy
Un buscador interno bien implementado no solo mejora la experiencia del usuario: también ayuda a que los visitantes encuentren contenido que de otra forma quedaría enterrado.
Con PDO, consultas preparadas y una estructura clara, este buscador es seguro, escalable y compatible con cualquier proyecto moderno en PHP.

