LIKE PDO MySQL PHP. Para hacer una búsqueda usando comodines se usará la sentencia LIKE de MySQL, y para buscar de manera exacta un simple con where.
¿Qué es LIKE en MySQL?
Like (su traducción sería como o parecido a, así como cuando lo aplicamos a “eres como mi abuelo”) es la solución cuando quieres buscar, pero tomando en cuenta parte del campo. Tenemos por ejemplo los campos con nombres: Juan, Julián, Juan Carlos, Luis.
a) Si buscas con «%ju%» te devolverá a (Juan, Julián y Juan Carlos).
b) Si buscas «%u%» te devuelve a los 4. Esto es gracias a que usamos los comodines dé %, que quieren decir “lo que sea” así que al usar «%ju%» le decimos a MySQL:
Busca en donde tenga cualquier cosa antes de ju, y cualquier cosa después de ju.
La consulta SQL queda algo así:
select * from personas where nombre like "%ju%";LIKE PDO MySQL PHP: Tipos de consulta
Nos basaremos en el sitio oficial de MySQL, todo depende de la necesidad del proyecto. Estos son ejemplos a una tabla de (PERSONAL)
A) Comodín derecha
Con esta consulta puedes encontrar los nombres (name) que comiencen por la letra b.
SELECT * FROM personal WHERE nombre LIKE 'b%';
+--------+--------+---------+------+------------+
| nombres|ape     | edad    | sex  | birth      |
+--------+--------+---------+------+------------+
| Buffy  | Harold | 23      | f    | 1989-05-13 |
| Bowser | Diane  | 34      | m    | 1989-08-31 |
+--------+--------+---------+------+------------+
Consulta en PDO:
$query = $db->prepare('SELECT * FROM personal  WHERE column LIKE ?');
$query->bindValue(1, "%fy", PDO::PARAM_STR);
$query->execute();B) Comodín izquierda
Con la siguiente consulta puedes buscar con los nombres que terminen con la letra o palabra fy
SELECT * FROM personal WHERE nombre LIKE '%fy';
+--------+--------+---------+------+----------+
| nombre |apellidos| edad | sex  | birth      |
+--------+---------+---------+------+---------+
| Fluffy | Harold  | 23   | f    | 1993-02-04 |
| Buffy  | Harold  | 34   | f    | 1989-05-13 |
+--------+--------+---------+------+----------+
C) Comodín izquierda y derecha
La siguiente consulta es para buscar los nombres que contengan en alguna parte la letra W:
SELECT * FROM personal WHERE nombre LIKE '%w%';
+----------+-------+---------+------+----------------+
| nombre   | apellidos | species | sex  | birth      |
+----------+-------+---------+------+----------------+
| Claws    | Gwen      | cat     | m    | 1994-03-17 |
| Bowser   | Diane     | dog     | m    | 1989-08-31 |
| Whistler | Gwen      | bird    | NULL | 1997-12-09 |
+----------+-------+---------+------+----------------+
D) Limite de caracteres en búsqueda
Para encontrar nombres que contengan exactamente un número exacto de caracteres, use instancias del _ carácter de patrón, por ejemplo, que tenga solo 5 caracteres:
SELECT * FROM personal WHERE nombre LIKE '_____';
+-------+--------+---------+--------+------------+
| nombre  | apellidos    | edad| sex| birth      |
+-------+--------+---------+------+--------------+
| Claws   | Gwen         | 23  | m  | 1994-03-17 |
| Buffy   | Harold       | 34  | f  | 1989-05-13 |
+---------+--------+---------+------+------------+
Como te dije todo depende de tu necesidad, sin embargo, aquí te dejo la documentación oficial:
Mas información
Búsqueda con PDO ejercicio completo
Haremos uso de un formulario y un fichero llamado (listarPersonas.php) pero ahora la búsqueda se hace usando Like. El código de la consulta quedaría así:
1.- Script del buscador
<?php
include_once "base_de_datos.php";
# Por defecto hacemos la consulta de todas las personas
$consulta = "SELECT * FROM personas";
# Vemos si hay búsqueda
$busqueda = null;
if (isset($_GET["busqueda"])) {
# Y si hay, búsqueda, entonces cambiamos la consulta
# Nota: no concatenamos porque queremos prevenir inyecciones SQL
$busqueda = $_GET["busqueda"];
$consulta = "SELECT * FROM personas WHERE nombre = ?";
}
# Preparar sentencia e indicar que vamos a usar un cursor
$sentencia = $base_de_datos->prepare($consulta, [
PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL,
]);
# Aquí comprobamos otra vez si hubo búsqueda, ya que tenemos que pasarle argumentos al ejecutar
# Si no hubo búsqueda, entonces traer a todas las personas (mira la consulta de la línea 5)
if ($busqueda === null) {
# Ejecutar sin parámetros
$sentencia->execute();
} else {
# Ah, pero en caso de que sí, le pasamos la búsqueda
# Un arreglo que nomás llevará la búsqueda con % al inicio y al final
$parametros = ["%$busqueda%"];
$sentencia->execute($parametros);
}
# Sin importar si hubo búsqueda o no, se nos habrá devuelto un cursor que iteramos más abajo...
?>
<!--Recordemos que podemos intercambiar HTML y PHP como queramos-->
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Tabla de ejemplo</title>
<style>
table, th, td {
border: 1px solid black;
}
</style>
</head>
<body>
<form action="listarPersonasConBusquedaExacta.php" method="GET">
<input type="text" placeholder="Buscar por nombre" name="busqueda">
<br>
<br>
<button type="submit">Buscar</button>
<br>
<br>
</form>
<table>
<thead>
<tr>
<th>ID</th>
<th>Nombre</th>
<th>Apellidos</th>
<th>Género</th>
<th>Editar</th>
<th>Eliminar</th>
</tr>
</thead>
<tbody>
<?php while ($persona = $sentencia->fetchObject()) {?>
<tr>
<td><?php echo $persona->id ?></td>
<td><?php echo $persona->nombre ?></td>
<td><?php echo $persona->apellidos ?></td>
<td><?php echo $persona->sexo ?></td>
<td><a href="<?php echo "editar.php?id=" . $persona->id ?>">Editar</a></td>
<td><a href="<?php echo "eliminar.php?id=" . $persona->id ?>">Eliminar</a></td>
</tr>
<?php }?>
</tbody>
</table>
</body>
</html>2. Base de datos
Vamos a usar una base de datos con su respectiva tabla llamado personas, aquí el script que pueden ejecutar bajo el entorno de PHPMyAdmin u otro gestor.
CREATE TABLE `personas` ( `id` bigint(20) UNSIGNED NOT NULL, `nombre` varchar(255) NOT NULL, `apellidos` varchar(255) NOT NULL, `sexo` char(1) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; INSERT INTO `personas` (`id`, `nombre`, `apellidos`, `sexo`) VALUES (3, 'Lucia', 'Pino', 'F'), (4, 'Carlos', 'Rosales', 'M'), (5, 'Lucrecia', 'Benito', 'F'), (6, 'Luis', 'Castro', 'M'), (7, 'Carmen', 'Loyola', 'F'), (8, 'Guillermo', 'Cotrina', 'M'); ALTER TABLE `personas` ADD PRIMARY KEY (`id`); ALTER TABLE `personas` MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;
CONCLUSION
Hemos aprendido a usar la cláusula Like en varias perspectivas según el uso que se le quiere dar.
Haciendo uso de un par de formularios podemos buscar de manera estática o dinámica con partes de la palabra clave haciendo uso de comodines.
Les dejare el script completo para que lo puedan implementar y ver cómo funciona en nuestro servidor local o de producción.

