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

    ¿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

    Relacionado  3 Formas para cerrar la conexión PDO de PHP

    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í:

    Relacionado  Eliminar con PHP PDO: Descargar Ejemplo completo

    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.

    Relacionado  Actualizar registros PDO PHP: Ejemplo Completo

    Sistemas 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!.

    Entradas Relacionadas

      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 *

    Subir