php

Búsqueda en MySQL con PHP y PDO: con like y coincidencia exacta

Esta es la tercera parte de los tutoriales sobre cómo consumir una base de datos de MySQL desde PHP usando PDO para ejecutar las consultas.

Puedes ver la primera parte aquí, y la segunda aquí. Lo que nos reúne en esta ocasión es la búsqueda en tablas desde PHP.

Para hacer una búsqueda usando comodines se usará la sentencia LIKE de MySQL, y para buscar de manera exacta un simple where.

Ejercicios de SQL y requisitos

Antes que nada, te invito a ver algunos ejercicios de consultas con SQL. Van a servirte para darte una idea de cómo funcionan las consultas independientemente del lenguaje con el que se haga.

Si no tienes MySQL o PHP mira aquí cómo se instalan. Oh, por cierto, igualmente puedes configurar MySQL en Android y Apache con PHP igualmente en Android.

Recuerda ver los tutoriales anteriores, pues aquí explicaré tomando en cuenta que ya los has leído. Como siempre, el código actualizado está en mi GitHub.

Ahora sí, comencemos.

Un poco de teoría con LIKE

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.

Si buscas con "%ju%" te devolverá a Juan, Julián y Juan Carlos. Si buscas "%u%" te devuelve a los 4. Esto es gracias a que usamos los comodines de %, 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.

En idioma SQL la consulta queda algo así:

select * from personas where nombre like "%ju%";

Nota: también existe RLIKE y por cierto, LIKE funciona en otros motores. Cabe mencionar que LIKE es una sentencia más de SQL, así que no solamente sirve para seleccionar sino también para eliminar, actualizar y otras operaciones.

Nota 2: podrías usar otros comodines con like, o usar un solo signo de porcentaje. Por ejemplo LIKE "%ju" devolverá aquellos campos en donde termine con ju, y "ju%" aquellos en donde empiecen con ju.

Búsqueda exacta o estricta

Si quieres buscar en donde el valor sea exactamente a la búsqueda hay que usar where. Por ejemplo:

select * from personas where nombre = "Luis";

Esta búsqueda es exacta, casi no es usada con cadenas pero no viene mal conocerla.

Hablar es de mal gusto, muéstrame el código

Búsqueda desde PHP con LIKE

Ahora que ya explicamos a like y todo eso de las búsquedas veamos cómo se aplica a PHP con PDO. Tomaremos la búsqueda de un parámetro GET y a partir del mismo ejecutaremos la consulta al motor.

Queda así:

See the gist on github.

Estamos protegiendo nuestro código y evitando inyecciones SQL usando un “placeholder”, es decir, un signo de interrogación, Luego, al ejecutar la sentencia, le ponemos a la búsqueda los signos de porcentaje.

No lo intentes hacer así:

select * from personas where nombre like "%?%";

Porque no funcionará. Tienes que poner los comodines en la cadena. Y nunca concatenes, pues estarías vulnerable a un ataque de inyección SQL.

Sin importar la consulta, al final se traen los resultados y se dibujan los datos. Por cierto, he agregado un formulario en donde se pone la búsqueda:

Like de SQL con PHP y PDO

El formulario se envía al mismo archivo de PHP. Para dibujarlo se crea una etiqueta form con el método en GET y al campo de búsqueda se le pone el nombre busqueda para que se concatene a la URL automáticamente.

See the gist on github.

De esta manera se hace la búsqueda y se muestran los resultados de manera fácil. El código está en el archivo listarPersonasConBusqueda.php.

Búsqueda exacta con PDO

Tenemos el mismo formulario y casi el mismo script (ahora se llama listarPersonasConBusquedaExacta.php) pero ahora la búsqueda se hace de manera exacta. El código de la consulta queda así:

See the gist on github.

Ahora usamos where e igualmente un placeholder, pero al ejecutar la sentencia no ponemos los signos de porcentaje porque debemos pasar la cadena limpia.

Nota: el motor de MySQL no distingue mayúsculas y minúsculas al menos que lo indiquemos. Por lo tanto, si buscamos “Luis” o “luis” dará lo mismo, es decir, traerá los resultados.

Poniendo todo junto

Como ya lo dije anteriormente, todo el código está en mi GitHub. Puedes descargarlo, ponerlo en tu carpeta pública y probar los ejemplos.

Te invito a leer más sobre PHP, MySQL y Bases de datos en mi blog.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

JavaScript (lado del cliente): leer pixeles de imagen

En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…

6 días hace

PHP y JavaScript: llenar select con AJAX

Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…

7 días hace

Imprimir PDF generado con HTML

Hoy vamos a ver programar la impresión de un PDF generado a partir de HTML…

1 semana hace

JavaScript: llenar select con arreglo

En este tutorial básico de JavaScript con HTML vamos a ver cómo llenar una lista…

2 semanas hace

Imprimir PDF a partir de URL

En este artículo se presenta una guía para imprimir un PDF a partir de una…

2 semanas hace

Imprimir PDF a partir de base64

En este post voy a enseñarte cómo imprimir un PDF a partir de su representación…

2 semanas hace

Esta web usa cookies.