LIKE PDO MySQL PHP: [Ejemplo completo]

LIKE PDO MySQL PHP [Ejemplo completo]

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.

Índice
  1. ¿Qué es LIKE en MySQL?
  2. LIKE PDO MySQL PHP: Tipos de consulta
    1. A) Comodín derecha
    2. B) Comodín izquierda
    3. C) Comodín izquierda y derecha
    4. D) Limite de caracteres en búsqueda
  3. Búsqueda con PDO ejercicio completo
    1. 1.- Script del buscador
    2. 2. Base de datos
  4. CONCLUSION

¿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)

  Consultar datos MySQL mediante PDO: Ejemplos

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

  SELECT DISTINCT usando INNER JOIN

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.

Datatables Dropdown PDO, ServerSide, Responsiva

ServerSide
Responsiva adaptable
Opciones de exportación Dropdown
Mensajes usando SweetAlert2
Acciones (Editar, Agregar, Ver, Eliminar)

Si quieres conocer otros artículos parecidos a LIKE PDO MySQL PHP: [Ejemplo completo] puedes visitar la categoría PDO PHP.

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

  1. Maria dice:

    Hola,
    Es genial el ejemplo, si queremos buscar dos o mas palabras a la vez como podríamos hacerlo?
    Gracias

    1. Nestor Tapia dice:

      Hola Maria

      Para buscar con mas palabras te recomendaria este articulo que detallo sobre lo que deseas.

      https://www.baulphp.com/buscador-avanzado-con-php-y-mysql/

  2. redes dice:

    Me ha quedado todo muy claro. Muchas gracias por el post!

Deja una respuesta

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

Este sitio web protege su privacidad al adherirse al Reglamento General de Protección de Datos de la Unión Europea (GDPR). No utilizaremos sus datos para ningún propósito que no haya dado su consentimiento. Obtenga más información en nuestra página política de privacidad