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

Publicado por parzibyte en

Like de SQL con PHP y PDO

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

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

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.

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

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.


parzibyte

He trabajado por más de 4 años en el desarrollo de software con experiencia en Java, PHP, JavaScript, HTML, Node.JS, Python, Android y Go. También he trabajado con bases de datos SQL como MySQL y SQLite, así como con bases de datos NoSQL usando MongoDB.Soy bueno utilizando algunos frameworks y herramientas como Firebase, jQuery, AngularJS, VueJS, CodeIgniter, Laravel, BulmaCSS, Bootstrap y Electron.Otros términos que conozco son: Arduino, GraphQL, API's, REST, AJAX, PouchDB, CouchDB, Experiencia de usuario, buenas prácticas de programación, Webpack, NPM, Administración de servidores y programación de scriptsLa plataforma en la que tengo más experiencia es la web, pero en mis ratos libres realizo unos pequeños ejercicios en C# y C.Estoy aquí para ayudarte a resolver tus problemas de programación y depuración :-)

1 Comment

MySQL y PHP con PDO: CRUD (create, read, update, delete) - Parzibyte's blog · marzo 15, 2019 a las 12:39 am

[…] De nuevo he añadido otro tutorial para saber cómo realizar búsquedas, míralo aquí. […]

Deja un comentario

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.

A %d blogueros les gusta esto: