Foros del Web » Programando para Internet » PHP »

más sobre querys dinámicas

Estas en el tema de más sobre querys dinámicas en el foro de PHP en Foros del Web. Hola a todos! Tengo este código: Código PHP: <? $query_Recordset1 = "SELECT * FROM familias " ; //Función que construye el query.  function  genera_query ( $cadena , $condicion )  {     $pos = ...
  #1 (permalink)  
Antiguo 06/07/2005, 19:51
 
Fecha de Ingreso: agosto-2004
Mensajes: 347
Antigüedad: 13 años, 3 meses
Puntos: 3
más sobre querys dinámicas

Hola a todos!

Tengo este código:

Código PHP:
<?
$query_Recordset1
="SELECT * FROM familias ";



//Función que construye el query. 
function genera_query($cadena,$condicion

  
$pos=strpos($cadena,"WHERE"); 

  if (
$pos === false
      
$cadena=$cadena." WHERE "
  if (
$pos !== false
      
$cadena=$cadena." AND "

  
$cadena=$cadena.$condicion
  return 
$cadena


//Construir el query dependiendo de las variables recibidas del formulario. 
if ($petals5!=""
   
$query_Recordset1.=genera_query ($query_Recordset1,"petals5 LIKE '1'"); 

if (
$petals6!=""
   
$query_Recordset1.=genera_query ($query_Recordset1,"petals6 LIKE '1'"); 


if (
$sepals5!=""
   
$query_Recordset1.=genera_query ($query_Recordset1,"sepals5 LIKE '1'"); 


if (
$sepals6!=""
   
$query_Recordset1.=genera_query ($query_Recordset1,"sepals6 LIKE '1'"); 

?>
y me da siempre error de este tipo:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * FROM familias WHERE petals5 LIKE '1'' at line 1

¿alguien puede echarme una mano?
  #2 (permalink)  
Antiguo 06/07/2005, 20:49
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 12 años, 8 meses
Puntos: 17
falta parte del código, me parece...
El error que aparece es un error de sintaxís SQL de la consulta
  #3 (permalink)  
Antiguo 06/07/2005, 21:26
 
Fecha de Ingreso: agosto-2004
Mensajes: 347
Antigüedad: 13 años, 3 meses
Puntos: 3
el archivo va incluido en otro que contiene lo que falta,

lo que me ocurre es que funciona perfectamente si defino yo la query:

por ejemplo= "SELECT * FROM familias WHERE petals5 like '1'"

por eso el fallo debe estar en la generación de la query


Gracias por su ayuda
  #4 (permalink)  
Antiguo 07/07/2005, 03:44
 
Fecha de Ingreso: noviembre-2003
Mensajes: 383
Antigüedad: 14 años
Puntos: 2
Hola sintesk7, soy el que "creo" la función que estas usando.

El problema está aquí:

$query_Recordset1.=genera_query ...

No se porque le has puesto $query_Recordset1. ya que la concatenación la realiza la propia función. Fijate en las líneas que pone ...

$cadena=$cadena.LoQueSea

...ahí es en donde se realiza la concatenación.
  #5 (permalink)  
Antiguo 07/07/2005, 06:08
 
Fecha de Ingreso: agosto-2004
Mensajes: 347
Antigüedad: 13 años, 3 meses
Puntos: 3
gracias por tu respuesta,

entonces que pongo?

Un Saludo
  #6 (permalink)  
Antiguo 07/07/2005, 07:16
 
Fecha de Ingreso: noviembre-2003
Mensajes: 383
Antigüedad: 14 años
Puntos: 2
pues entre el $query_Recordset1 y en signo = NO debe haber ningún punto ( . ).

debe quedar así:

$query_Recordset1=genera_query ...
  #7 (permalink)  
Antiguo 07/07/2005, 16:14
 
Fecha de Ingreso: agosto-2004
Mensajes: 347
Antigüedad: 13 años, 3 meses
Puntos: 3
Muchísimas gracias,

con esto he conseguido solucionar mi problema.

Otra cosilla,

como puedo hacer para que esta parte del código sea dinámica (se genere a patir de una tabla):

Código PHP:
<? //Construir el query dependiendo de las variables recibidas del formulario. 
if ($petals5!=""
   
$query_Recordset1=genera_query ($query_Recordset1,"petals5 LIKE '1'"); 

if (
$petals6!=""
   
$query_Recordset1=genera_query ($query_Recordset1,"petals6 LIKE '1'"); 


if (
$sepals5!=""
   
$query_Recordset1=genera_query ($query_Recordset1,"sepals5 LIKE '1'"); 


if (
$sepals6!=""
   
$query_Recordset1=genera_query ($query_Recordset1,"sepals6 LIKE '1'"); 
?>
tengo definidas ya las variables ($petals5, $petals6....)

y he probado con un bucle y no me funciona

las variables las defino así, y funcionan correctamente:

Código PHP:
do {
$query=$row_form['camps_var']; 
$
$row_form['camps_var']=$_POST[$query];
} while (
$row_form mysql_fetch_assoc($form)); 

Pero quisiera tambien que se me generara el código para construir la query.


Un Saludo

Última edición por sintesk7; 07/07/2005 a las 16:21
  #8 (permalink)  
Antiguo 08/07/2005, 02:20
 
Fecha de Ingreso: noviembre-2003
Mensajes: 383
Antigüedad: 14 años
Puntos: 2
Explica mejor cuantas tablas son, cuantos campos (más o menos) por tabla y que quieras construir y hacer con cada tabla.
Para tener una idea más amplia de lo que quieres hacer.
  #9 (permalink)  
Antiguo 08/07/2005, 09:26
 
Fecha de Ingreso: agosto-2004
Mensajes: 347
Antigüedad: 13 años, 3 meses
Puntos: 3
hola pellagofio!

Te explico como tengo la cosa montada:

Tengo 2 tablas (familias y form)

la tabla familias es de 150 x 150 (150 columnas o variables y 150 registros)

la tabla form tiene 3 columnas (id, camp_var y camp_nom) y 150 filas

camp_var se corresponde con las columnas de la tabla familias,

lo que hagoe s definir variables desde la tabla form y consultar a familias

Gracias por tu ayuda
  #10 (permalink)  
Antiguo 08/07/2005, 17:52
 
Fecha de Ingreso: agosto-2004
Mensajes: 347
Antigüedad: 13 años, 3 meses
Puntos: 3
¿se entiende así?
  #11 (permalink)  
Antiguo 10/07/2005, 13:29
 
Fecha de Ingreso: noviembre-2003
Mensajes: 383
Antigüedad: 14 años
Puntos: 2
Bueno, supongo que tienes construido un formulario de busqueda, en el cual seleccionas los campos por los que quieres realizar la busqueda, y luego lo envias picando en el submit a el script que debe construir el query.

Imaginemos que tienes un formulario con lo siguiente:

Campo........tipo........valor
Nombre...........text........Juan Jose
Apellido...........text........Medina
Edad...............text........34

Botón .........tipo...........valor
Buscar.............Submit.......Buscalo
Restablecer.......reset.........Restablelo


Cuando picas en el submit tu script recibirá ...

Código PHP:
$_POSTNombre=>Juan JoseApellido=> MedinaEdad=> 34Buscar=> Buscalo 
Entonces lo que tienes que hacer es recorrer el array que recibes ($_POST) para ver que variables contiene y que valor tiene cada una...


Código PHP:
foreach( $_POST as $clave => $valor 
{
   
$query_Recordset1=genera_query ($query_Recordset1,$clave." LIKE '1'");


...pero resulta que en el mismo array recibes los valores del submit. Entonces tienes que controlar esos campos y botones que recibes y que no quieres que formen parte del query. En nuestro ejemplo sería...

Código PHP:
foreach( $_POST as $clave => $valor 
{
   if (
$clave!="Buscar")
       
$query_Recordset1=genera_query ($query_Recordset1,$clave." LIKE '1'");


Creo que esto es lo que necesitas.

Ya me dirás.
  #12 (permalink)  
Antiguo 11/07/2005, 19:14
 
Fecha de Ingreso: agosto-2004
Mensajes: 347
Antigüedad: 13 años, 3 meses
Puntos: 3
Me funciona perfecto,

Muchísimas gracias!!

Un Saludo
  #13 (permalink)  
Antiguo 12/07/2005, 03:30
 
Fecha de Ingreso: noviembre-2003
Mensajes: 383
Antigüedad: 14 años
Puntos: 2
Me alegro de haberte ayudado.

Espero que volvamos a colaborar en otro momento.

saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:45.