Perl - Insertar imagenes en una base mysql con Perl

 
Vista:

Insertar imagenes en una base mysql con Perl

Publicado por Emilio (1 intervención) el 22/08/2007 17:09:40
¡ Hola a todos !
Estoy construyendo una base de datos con una tabla donde inserto el nombre y después una foto. La interfaz para la entrada de datos la realizo en Perl ( posteriormente tengo interes en portarla a Perl/Tk ). Sin embargo me he encontrado con el problema de que al insertar la foto me devuelve un error. A continuación paso a describir todo el trabajo:

Tengo la siguiente tabla en una base de datos:

----------------------------------------------------------------------------------------------------------------------------------------
create table Act (
nombre varchar(40) primary key,
foto longblob );

Y el script en Perl correspondiente:

----------------------------------------------------------------------------------------------------------------------------------------

#!/usr/bin/perl
use DBI;

sub continuar
{
$bucle=1;
do
{
print("¿ Deseas continuar (S/N) ? ");
$term=<STDIN>;
chop($term);
$term=uc($term);
if ( ($term ne "S") && ($term ne "N") )
{ print("Entrada incorrecta\n"); }
else { $bucle=0; }
}
while ( $bucle );
return $term;
}

sub cerrar
{
$db->disconnect || warn("Fallo al desconectar.\nError: $DBI::errstr\n");
exit;
}

$db=DBI->connect("dbi:mysql:Personal","abraxas","e27g11") || die("Error al conec
tar con la base de datos\n.Error: $DBI::errstr\n");
print("Conectado con la base de datos\n");
$term="S";
while ( $term eq "S" )
{
system("clear");
print "Nombre: ";
$nombre=<STDIN>;
chop($nombre);

$bucle=1;
while ( $bucle )
{
print "Ruta a la imagen: ";
$ruta=<STDIN>;
chop($ruta);
if ( -e $ruta )
{
@st=stat($ruta);
open(entrada,"<$ruta");
binmode(entrada);
sysread(entrada,$imagen,$st[7]);
close(entrada);
$bucle=0;
}
else
{
print("El fichero $ruta no existe \n");
$term=continuar;
if ( $term eq "N" ) { cerrar; }
else { $bucle=1; }
}
}

$res=$db->do("insert into Act values('$nombre','$imagen');") || warn("Imposible insertar los datos.\nError: $DBI::errstr\n");
$res=$db->do("commit;");
$term=continuar;
if ( $term eq "N" ) { cerrar; }
}

----------------------------------------------------------------------------------------------------------------------------------------

El problema que recibo al agrega la foto es el siguiente:

DBD::mysql::db do 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 '���:~�>�B%�9�Z�ґ�LMɨ�4g?�.5��z��H6����9[ͣ:h�Gc|o������U�W�E섎�#HR�7V�ئn�' at line 1 at ./base.pl line 62, <STDIN> line 2.
Imposible insertar los datos.
Error: 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 '���:~�>�B%�9�Z�ґ�LMɨ�4g?�.5��z��H6����9[ͣ:h�Gc|o������U�W�E섎�#HR�7V�ئn�' at line 1

¡¡ Y resulta que esta es la combinación que funciona !! Es como si editase el archivo e intentara introducir los datos desde la consola de mysql ( :-) yo soy así de bestia ).
En fin, ¿ alguien sabe lo que ocurre ?
Gracias de antemano.

P.D.: Si alguien me sugiere el uso de quote, ya lo he probado, mediante dos modos ( por si acaso la flauta suena, por cierto no me echeis a los perros ):

'$db->quote($variable)'
y
$db->quote($variable)

donde $variable es $nombre y $imagen.
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