PDO PHP

LIKE PDO MySQL PHP: [Ejemplo completo]

Buscador PHP & MySQL usando PHP PDO con comodines

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.

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

3 comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba