PHP - SELECT con WHERE variable.

 
Vista:
sin imagen de perfil
Val: 18
Ha aumentado su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

SELECT con WHERE variable.

Publicado por Enrique (6 intervenciones) el 21/04/2021 18:35:00
Saludos a todos.

Quiero hacer esta consulta MySQL:

1
"SELECT * FROM tabla WHERE columna LIKE '%cadena_busqueda%'

La consulta funciona perfectamente pero 'columna' no tiene porque ser la misma.
'columna' lo obtengo de un <select> <option> <option> </select>. Al <select> le he dado el nombre 'campo':

1
2
3
4
5
6
7
8
<select name='campo'>
<option value='id'>Codigo</option>
<option value='nombre_f'>Nombre Fiscal</option>
<option value='cif'>CIF/DNI</option>
...
... así con todas las columnas de la tabla
...
</select>

Entonces transformo la sentencia SQL y queda así:

1
"SELECT * FROM tabla WHERE " . $_POST['campo'] . "LIKE '%cadena_busqueda%'

pero me da error.
He comprobado que $_POST['campo'] tiene el valor seleccionado en <select>, por ejemplo, 'nombre_f'.
La pregunta es si está permitido WHERE $variable o si estoy cometiendo un error en otra parte del código.

Espero vuestras sugerencias. Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 393
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

SELECT con WHERE variable.

Publicado por Jefferson (203 intervenciones) el 21/04/2021 23:46:11
Hola

1
2
3
$cadena_busqueda='tal cosa';
 $post=$_POST['campo'];
 $select="SELECT * from tabla where " . $post . " LIKE  '%' '".$cadena_busqueda."' '%' ";

Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 18
Ha aumentado su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

SELECT con WHERE variable.

Publicado por Enrique (6 intervenciones) el 22/04/2021 09:57:19
Me funcionó. Muchísimas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

SELECT con WHERE variable.

Publicado por Mauro (1036 intervenciones) el 22/04/2021 14:30:13
Hola Enrique:

Ten cuidado con esto que estás haciendo... te estás exponiendo a ataques de tipo inyección SQL.

Como mínimo deberías validar que el valor recibido en $_POST['campo'] corresponde a una columna de la tabla en cuestión.

Exitos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 18
Ha aumentado su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

SELECT con WHERE variable.

Publicado por Enrique (6 intervenciones) el 23/04/2021 10:12:32
Hola Mauro.

Como buen novato no había oído hablar de la inyección SQL y me he puesto a buscar información en internet.
En primer lugar no se como validar que $_POST['campo'] tenga el valor de una columna de la tabla pero por lo leído por internet aconsejan utilizar mysqli_real_escape_string();.

Entiendo que yo debería hacer $post = mysqli_real_escape_string($conexion, $_POST['campo']); en la línea anterior a la consulta sql. ¿Es así?

Muchas gracias por tu advertencia.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

SELECT con WHERE variable.

Publicado por Mauro (1036 intervenciones) el 23/04/2021 14:17:11
Hola Enrique:

No hay problema, me alegra haberte ayudado :)

Si quieres más información sobre la inyección sql y cómo prevenirla te recomiendo leer este artículo que escribí.

Y si te preocupa la seguridad en tus aplicaciones te invito a que me sigas en Twitter ya que en unas semanas estaré haciendo un taller en vivo sobre la prevención de las vulnerabilidades más frecuentes en PHP.

Ahora sí, respecto de tu duda, la validación puedes hacerla de varios modos.

Viendo lo que comentas, que el campo sale de un select:

'columna' lo obtengo de un <select> <option> <option> </select>

Bastaría con validar que $_POST['campo'] pertenezca al arreglo de valores mostrados en el <select> <option>.

Para ello puedes usar la función in_array

Consúltame si te quedan dudas ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar