Consulta a BBDD MySQL con LIKE %search% [SOLUCIONADO]

Utilización del LIKE en consultas MySQL con PHP

La capacidad de realizar una búsqueda con comodines en nuestra base de datos MySQL es una poderosa característica que puede facilitarnos enormemente la vida. Es en estos contextos donde cobra relevancia el operador LIKE y su uso combinado con el wildcard %search% en PHP.

Ejemplificando el uso de LIKE %search%

Supongamos que tenemos una tabla de usuarios en nuestra base de datos y queremos buscar a todos aquellas personas cuyo nombre comienza con la letra “J”. Nuestra consulta se vería de la siguiente manera:

<?php
$conexion = mysqli_connect("localhost","username","password","database");
$busqueda = "J%";
$sql = "SELECT * FROM Usuarios WHERE nombre LIKE '$busqueda'";
$resultado = mysqli_query($conexion, $sql);
?>

Un paso más allá con las consultas polivalentes

La belleza de la consulta anterior es su flexibilidad. Al pasar nuestras condiciones de búsqueda a una variable, tenemos la posibilidad de construir consultas polivalentes y altamente dinámicas. Si a esto le sumamos una interfaz básica de búsqueda en nuestro programa, las posibilidades que obtenemos se amplían enormemente.

Realizando búsquedas dinámicas

Consideremos ahora el supuesto en el que queremos realizar búsquedas basándonos en el input proporcionado por el usuario en un formulario HTML. Al enviar la información, esta se recoge a través de PHP y se almacena en nuestra variable $busqueda, para ser posteriormente ejecutada en la consulta.

<form method="post" action="busqueda.php">
 <input type="text" name="keyword" required>
 <input type="submit" value="Buscar">
</form>

<?php
$conexion = mysqli_connect("localhost","username","password","database");
$keyword = '%'.htmlspecialchars($_POST['keyword']).'%';
$sql = "SELECT * FROM Usuarios WHERE nombre LIKE ?";
$preparedStatement = mysqli_prepare($conexion, $sql);
mysqli_stmt_bind_param($preparedStatement, 's', $keyword);
mysqli_stmt_execute($preparedStatement);
$resultado = mysqli_stmt_get_result($preparedStatement);
?>

Evitando la inyección SQL

Es crucial entender el riesgo de inyección SQL en nuestras aplicaciones. La inyección SQL es un método que los atacantes pueden usar para hackear nuestras bases de datos. Cuando usamos PHP para conectar con MySQL y manipular datos, debemos evitar que los usuarios puedan inyectar SQL en nuestras consultas. En el ejemplo anterior, evitamos la inyección SQL al usar sentencias preparadas en MySQLi.

El LIKE y la optimización de la base de datos

Finalmente es importante mencionar que aunque la función LIKE puede ser muy útil, también puede causar ciertos problemas si no se utiliza adecuadamente. Es importante tener en cuenta que usar LIKE con un wildcard al inicio de la cadena de búsqueda puede resultar en un desempeño subóptimo especialmente en bases de datos muy grandes. Esto se debe a que MySQL no podrá utilizar los índices de forma efectiva, lo que podría reducir la velocidad de nuestra consulta. Por lo tanto, es recomendable tener en cuenta estas consideraciones al implementar estas funcionalidades en nuestras aplicaciones PHP.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad