• Publicidad

No detecto el error en esta consulta SQL

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

No detecto el error en esta consulta SQL

Notapor danimera » 2012-09-03 06:40 @319

Parece raro, pero obtengo el siguiente error:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. Error en busqueda x: SELECT a.id, a.id_inmueble, a.titulo, a.operacion, a.banos, a.precio, a.tipo, a.precio, a.moneda, a.habitaciones, a.url FROM inmueble_temp a,barrio_temp barrio WHERE ( a.titulo <> '' AND barrio.cross_ref =11010 AND a.idBarrio = barrio.id AND a.operacion='temporada' AND a.tipo='casas' AND a.moneda='ARS' AND a.precio <=90 AND a.habitaciones >=1 AND a.banos >=1 ) 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 '' at line 14 at /usr/lib/perl5/5.8.8/CGI/Carp.pm line 314.  


Mas aun, si copio y pego esa consulta en MySQL no me saca ningún error... por eso creo que mi problema está en el Perl y no en el MySQL. Mi código es:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.         my $q2 = "
  2.         SELECT
  3.         a.id,
  4.         a.id_inmueble,
  5.         a.titulo,
  6.         a.operacion,
  7.         a.banos,
  8.         a.precio,
  9.         a.tipo,
  10.         a.precio,
  11.         a.moneda,
  12.         a.habitaciones,
  13.         a.url
  14.         FROM
  15.         inmueble_temp a".$from." ".$where;
  16.  
  17.  
  18.  
  19.     #return $q2  ;
  20.     #$qq = "select * from barrios";
  21.     #my $sth = $dbh->prepare("SELECT a.id, a.id_inmueble, a.titulo, a.operacion, a.banos, a.precio, a.tipo, a.precio, a.moneda, a.habitaciones, a.url FROM inmueble_temp a,barrio_temp barrio WHERE ( a.titulo <> '' AND barrio.cross_ref =11010 AND a.idBarrio = barrio.id AND a.operacion='temporada' AND a.tipo='casas' AND a.moneda='ARS' AND a.precio <=90 AND a.habitaciones >=1 AND a.banos >=1 ) ") or die $dbh->errstr();
  22.     #$sth->execute() or  die "Error x:". $dbh->errstr();
  23.     #$inms =  $sth->fetchall_arrayref();
  24.         my $inms = $dbh->selectall_arrayref( $q2, { Slice => {} }  ) or die "Error en búsqueda x: $q2".  $dbh->errstr();
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Lo raro para mi es que, esa consulta no me da error si la copio y pego directamente en vez de usar la variable $q2... :?
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Publicidad

Re: No detecto el error en esta consulta SQL

Notapor explorer » 2012-09-03 08:00 @375

Yo no veo ningún error claramente visible. Puede ser cualquier cosa. Hasta el avance de línea que hay delante del primer SELECT.

Yo haría pruebas quitando líneas de código a la sentencia SQL. O empezando por una pequeña que funcione, y luego ir agregando argumentos.

Para estar seguros, saca en pantalla $q2 antes de hacer la consulta, para ver cómo es la consulta que estamos haciendo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: No detecto el error en esta consulta SQL

Notapor danimera » 2012-09-03 08:09 @381

Exactamente cuando hago el print de $q2... y este es el resultado, el cual pego en MySQL y se ejecuta bien, solo que el resultado es 0... pero eso no es problema...

Sintáxis: [ Descargar ] [ Ocultar ]
  1. SELECT a.id, a.id_inmueble, a.titulo, a.operacion, a.banos, a.precio, a.tipo, a.precio, a.moneda, a.habitaciones, a.url FROM inmueble_temp a,barrio_temp barrio WHERE ( a.titulo <> '' AND barrio.cross_ref =11010 AND a.idBarrio = barrio.id AND a.operacion='temporada' AND a.tipo='casas' AND a.moneda='ARS' AND a.precio <=90 AND a.habitaciones >=1 AND a.banos >=1 ) 


La anterior consulta me funciona bien si la pego directamente en Perl, pero cuando pongo la variable que contiene la consulta ahí sí tengo el error...
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: No detecto el error en esta consulta SQL

Notapor explorer » 2012-09-03 10:01 @459

Perdona, pero esa no puede ser la salida de $q2... en el programa veo que consta de varias líneas... y lo que muestras es casi una sola.

Estoy empezando a sospechar que algunos espacios en blanco o avances de línea, no son tales. Quizás se te ha colado un carácter extraño (en Unicode se definen más de veinte tipos de espacio en blanco diferentes).

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. $ perl -E 'for (0 .. 0xFFFF) { printf("%04x\n", $_) if chr($_)=~/\s/ }'
  2. 0009
  3. 000a
  4. 000c
  5. 000d
  6. 0020
  7. 0085
  8. 00a0
  9. 1680
  10. 180e
  11. 2000
  12. 2001
  13. 2002
  14. 2003
  15. 2004
  16. 2005
  17. 2006
  18. 2007
  19. 2008
  20. 2009
  21. 200a
  22. 2028
  23. 2029
  24. 202f
  25. 205f
  26. 3000
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: No detecto el error en esta consulta SQL

Notapor danimera » 2012-09-03 10:10 @465

Bueno la salida es esta exactamente:

Sintáxis: [ Descargar ] [ Ocultar ]
  1.  
  2.     SELECT 
  3.     a.id, 
  4.     a.id_inmueble, 
  5.     a.titulo, 
  6.     a.operacion, 
  7.     a.banos, 
  8.     a.precio, 
  9.     a.tipo, 
  10.     a.precio, 
  11.     a.moneda, 
  12.     a.habitaciones, 
  13.     a.url 
  14.     FROM 
  15.     inmueble_temp a,barrio_temp barrio WHERE ( a.titulo <> '' AND barrio.cross_ref =1101 0 AND a.idBarrio = barrio.id AND a.operacion='temporada' AND a.tipo='casas' AND a.moneda='ARS' AND a.precio <=90 AND a.habitaciones >=1 AND a.banos >=1 )  


SI ves mi código, tengo comentado $q2 y ya lo descomenté... cuando veo el código fuente veo una línea en blanco antes de SELECT.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: No detecto el error en esta consulta SQL

Notapor explorer » 2012-09-03 10:59 @499

Veo un espacio en blanco sospechoso entre '1101' y '0'.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: No detecto el error en esta consulta SQL

Notapor danimera » 2012-09-04 07:23 @349

explorer escribiste:Veo un espacio en blanco sospechoso entre '1101' y '0'.

Sí señor... hay un error ahí: barrio.cross_ref =1010 0 AND a.idBarrio = barrio.id
Humm... rarísimo por qué me coloca ese 0 separado.

Y ese trozo de consulta lo genero así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     if ( $inmueble->{'barrio'} ) {
  2.         $from   = ",barrio_temp barrio";
  3.         $where .= "AND barrio.cross_ref =" . $inmueble->{'barrio'} . " AND a.idBarrio = barrio.id  ";
  4.     }
  5.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Donde $inmueble->{'barrio'} vale 1010. En formulario que lo envía y cuando lo imprimo solo en mi navegador veo 10100 pero si veo el código fuente entonces veo 1010 0.

No sé dónde salió ese 0... Será que es posible que mi editor me esté subiendo archivos con otra codificación.
No sé... pues mi PC lo resintalé hace poco. :?
Última edición por explorer el 2012-09-04 07:46 @365, editado 1 vez en total
Razón: Formateado de código con Perltidy
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: No detecto el error en esta consulta SQL

Notapor explorer » 2012-09-04 07:53 @370

No veo problemas en ese código if(), salvo que hayas tenido cuidado de que $where, antes de entrar ahí, contenga un espacio en blanco al final, para que no quede pegado al 'AND...' que añades luego en la línea 3. Pero veo que esa misma línea 3 la terminas con un espacio en blanco, así que supongo que has tenido cuidado con eso.

El problema está entonces antes, en el lugar donde se define $inmueble->{'barrio'}. Dices que vale 1010, pero, ¿has probado a ejecutar length($inmueble->{'barrio'})?

Si en el navegador lo ves bien pero no en el código, significa que ese espacio puede ser un espacio en blanco de ancho cero (sí, existen).

Yo pasaría el código generado por un conversor hexadecimal y así sabría qué hay ahí.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: No detecto el error en esta consulta SQL

Notapor danimera » 2012-09-04 08:22 @390

Sí, explorer, tienes razón... El problema estaba antes. Resulta que hice esto al parámetro.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. return "<pre>".Dumper $q->param('barrio');  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


y me arrojó:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. $VAR1 = '1010'; 
  2. $VAR2 = '0'; 


¿Cómo es posible que un parámetro venga como array...? O, hum, si solo es un campo de un formulario... aunque... :S ¿será que solo es un campo, será que hay dos campos con el mismo nombre y pasa eso?
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: No detecto el error en esta consulta SQL

Notapor explorer » 2012-09-04 09:50 @452

No me gusta lo que has puesto, porque da la sensación de que '0' viene de resultas de la ejecución de Dumper().

Aunque... es cierto... podría ser que en el formulario existiera más de un control llamado 'barrio'.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 26 invitados