• Publicidad

Error al construir sentencia 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.

Error al construir sentencia SQL

Notapor majitop1986 » 2009-03-26 10:42 @487

¡Hola a todos!

Tengo una consulta: estoy creando un script para poder conectarme a dos bases distintas ya que necesito extraer datos de ambas. Estoy usando el DBD::mysql, y así tengo mis objetos inicializados:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use strict;
use warnings;

use DBI;
use Mail::Sender;
use DateTime::Format::Strptime;

my $Strp = new DateTime::Format::Strptime(pattern=>'%Y-%m-%d');

my $db='fase2';
my $host='xxx.xxx.net';
#$port="3306";
my $userid='xx-xx';
my $pass='';
my $connectionInfo="DBI:mysql:database=$db;host=$host;mysql_socket=/var/lib/mysql/mysql.sock";

my $dbh = DBI->connect($connectionInfo, 'xx-xx', '$xx', {'RaiseError' => 1});
die "Ha habido un problema al conectar con la base de datos: ".$DBI::errstr unless(defined($dbh));

my $db2='info';
my $host2='xxx.xxx.net';
#$port="3306";
my $userid2='xx-xx';
my $pass2='';
my $connectionInfo2="DBI:mysql:database=$db2;host=$host2;mysql_socket=/var/lib/mysql/mysql.sock";

my $dbh2 = DBI->connect($connectionInfo2, 'xx-xx', '$xx', {'RaiseError' => 1});
die "Ha habido un problema al conectar con la base de datos: ".$DBI::errstr unless(defined($dbh2));
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Ahora ambas bases de datos están en el mismo host y por lo mismo puedo acceder a ella con el mismo user y pass pero me sale este error:

Código: Seleccionar todo
DBD::mysql::st execute failed: 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 1 at recordatorio.pl line 387.


Lo que tengo en la línea 387 y antes de ella es esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$queryDep = "SELECT filial, departamento FROM departamentos WHERE id_departamentos=".$idDepartamento;
$sthDep = $dbh2->prepare($queryDep);
$sthDep->execute();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ayuda, por favor :?
Última edición por majitop1986 el 2009-03-26 11:51 @536, editado 1 vez en total
majitop1986
Perlero nuevo
Perlero nuevo
 
Mensajes: 64
Registrado: 2008-04-02 14:04 @628

Publicidad

Notapor explorer » 2009-03-26 11:49 @534

El error dice que la sentencia SQL está mal construida.

¿Cuánto vale $idDepartamento?

No tiene nada que ver con las conexiones.

Te sugiero que vuelvas a editar tu mensaje y cambies el título de este mensaje.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor charlygarcia » 2009-03-26 15:00 @667

Creo que le falta un detallito, a mi también me ha pasado.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$QueryDep = "SELECT filial, departamento FROM departamentos WHERE id_departamentos='".$idDepartamento."'";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Tal vez te hace falta la comilla sencilla pero creo que deberías tratar de imprimir la consulta SQL para "verla" antes de ejecutarla de pronto está mal armada.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print("$QueryDep ");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Yo te recomiendo que le agregues las comillas sencillas
Mal
Sintáxis: [ Descargar ] [ Ocultar ]
Using sql Syntax Highlighting
......WHERE id_departamentos=123
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

¡¡¡¡Bien!!!!
Sintáxis: [ Descargar ] [ Ocultar ]
Using sql Syntax Highlighting
......WHERE id_departamentos='123'
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Avatar de Usuario
charlygarcia
Perlero nuevo
Perlero nuevo
 
Mensajes: 54
Registrado: 2009-03-06 23:16 @011

Notapor kidd » 2009-03-26 15:24 @683

Más bien lo que deberías hacer es permitirle al módulo DBI hacer el embed de tus variables:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$sthDep = $dbh2->prepare("SELECT filial, departamento FROM departamentos WHERE id_departamentos=?");
$sthDep->execute($idDepartamento);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor majitop1986 » 2009-03-27 17:30 @770

Hola, muchas gracias por las respuestas y tiene razón charlygarcia... ese era mi error :D Muchas gracias a todos por tratar de ayudar.
majitop1986
Perlero nuevo
Perlero nuevo
 
Mensajes: 64
Registrado: 2008-04-02 14:04 @628

Notapor charlygarcia » 2009-03-27 18:27 @810

Es buena práctica antes de ejecutar la consulta, tratar de imprimirla en pantalla o en el navegador.

Y darle una miradita a la consulta SQL porque podría pasar que ejecutemos una operación que no queramos.

Con un print() basta y hasta nos ayuda a detectar errores en la cadena de la consulta SQL.
Avatar de Usuario
charlygarcia
Perlero nuevo
Perlero nuevo
 
Mensajes: 54
Registrado: 2009-03-06 23:16 @011


Volver a Intermedio

¿Quién está conectado?

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

cron