elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Consulta con numero de parametros variable (PDO)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Consulta con numero de parametros variable (PDO)  (Leído 2,257 veces)
i-node

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Consulta con numero de parametros variable (PDO)
« en: 20 Febrero 2014, 11:15 am »

Hola a todos,

Mi consulta es la siguiente.. Tengo un formulario con varios campos input que sirve para realizar consultas a una base de datos. Obviamente, no siempre se hara una busqueda utilizando todos los campos, por lo tanto el numero de parametros que se le pasan a la consulta select no siempre va a tener el mismo numero de campos a buscar.

Tal vez en alguna ocasion quiera filtrar por pais con un:

SELECT * FROM principal WHERE pais="España";

Otra vez tal vez quiera filtrar por nombre:

SELECT * FROM principal WHERE nombre="Pedro";

O tal vez quiera buscar un cliente Pedro de España:

SELECT * FROM principal WHERE nombre="Pedro" AND pais="España";

Hay alguna manera de hacer esto que no sea con if's y utilizando empty y alguna variable de control para saber cuantos parametros se le van a añadir? Porque lo veo algo engorroso y poco profesional xD

Gracias por adelantado.
Un saludo.


En línea

i-node

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Re: Consulta con numero de parametros variable (PDO)
« Respuesta #1 en: 20 Febrero 2014, 15:40 pm »

Bueno, al final lo he hecho asi.. que es mas corto, aunque sigue llevando curro. Os pego el trozo que interesa..

Código
  1. try {
  2.  
  3. foreach($_GET as $key => $value) {
  4. if($value != '') $datos[$key] = $value;
  5. }
  6.  
  7. $parametros = count($datos);
  8.  
  9. $sql="SELECT * FROM principal WHERE ";
  10. $pdo = new PDO("$dbtype:host=$dbhost;dbname=$dbname;charset=$dbcharset", $dbuser, $dbpass);
  11. $pdo->setAttribute (PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  12.  
  13. $i = 0;
  14.  
  15. foreach($datos as $key => $value) {
  16. if ($parametros > 1 && $i < ($parametros - 1)) $sql .= "$key LIKE :$key AND ";
  17. if ($parametros < 2 || $i == ($parametros -1))  $sql .= "$key LIKE :$key";
  18.  
  19. $i++;
  20. }
  21.  
  22. $gdb = $pdo->prepare($sql);
  23.  
  24. foreach($datos as $key => $value) {
  25. $gdb->bindParam(":$key", $value, PDO::PARAM_STR);
  26. }
  27.  
  28. $gdb->execute();
  29.  
  30. $i=0;


« Última modificación: 20 Febrero 2014, 16:57 pm por @drvy » En línea

segurolas.es

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Consulta con numero de parametros variable (PDO)
« Respuesta #2 en: 28 Febrero 2014, 13:54 pm »

Código
  1. class Filter {
  2.  
  3.    private $filtros = [];
  4.  
  5.    function __get($filtro) {
  6.        return "$filtro IN(" . implode(",", $this->filtros[$filtro]) . ")";
  7.    }
  8.  
  9.    function __construct($cadena) {
  10.        foreach (explode('&', $cadena) as $par) {
  11.            list($filtro, $valor) = explode('=', $par);
  12.            $this->filtros[$filtro][] = is_numeric($valor) ? $valor : "'$valor'";
  13.        }
  14.    }
  15.  
  16. }
  17.  
  18. $_SERVER['QUERY_STRING'] = "select_time=2&grade=3&grade=4&grade=terror&genre=amor&genre=9&genre=5&language=0";
  19. $filtros = new Filter($_SERVER['QUERY_STRING']);
  20. $consulta = "SELECT * FROM tblmovies WHERE $filtros->grade AND $filtros->genre AND $filtros->language AND $filtros->select_time;";
  21. var_dump($_SERVER['QUERY_STRING'], $filtros, $consulta);
  22.  
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
pasar parametros a una consulta en access
Programación Visual Basic
JUSEMS 2 6,692 Último mensaje 9 Julio 2005, 19:46 pm
por BADBYTE-K
parametros en consulta
Programación Visual Basic
mitsumy 0 1,069 Último mensaje 29 Marzo 2006, 19:29 pm
por mitsumy
concatenar numero y variable
Desarrollo Web
kakashi20 1 3,153 Último mensaje 8 Noviembre 2011, 23:03 pm
por madpitbull_99
Insert en Stored Procedure con un numero de parametros variable
Bases de Datos
haupter 1 3,310 Último mensaje 25 Marzo 2013, 17:36 pm
por 1mpuls0
Consulta con un numero variable de condiciones
Bases de Datos
santi810 5 3,480 Último mensaje 31 Agosto 2014, 15:50 pm
por Carloswaldo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines