OVH Cloud OVH Cloud

Perl Mysql Longblob

9 réponses
Avatar
Frantz Dorsemaine
Bonjour,

Je shouaite insérer dans une base de donées MySql des pièces jointes de
tous type (.doc, .pdf, .xls, .gif,.jpg)

Je pense savoir qu'il faut les encoder avant de pouvoir les insérer dans un
champs de type LONGBLOB.

J'ai toujour des erreur de syntax Mysql.

Voici la procedure que j'emploi.

Je récupere le non du fichier puis je le zip par
"$zip=Archive::Zip->new();", puis je l'encode certainement mal puis je
l'insert, enfin j'essai ! dans la base de donnée. Et là, pas glop pas glop.

Si quelqu'un peut m'aider.

Frantz DOREMAINE

9 réponses

Avatar
Emmanuel Florac
Le Sun, 25 Feb 2007 16:28:45 +0000, Frantz Dorsemaine a écrit :


Je récupere le non du fichier puis je le zip par
"$zip=Archive::Zip->new();", puis je l'encode certainement mal puis je
l'insert, enfin j'essai ! dans la base de donnée. Et là, pas glop pas glop.


Il faut donner le message d'erreur complet et exact, on n'a pas de bouloe
de cristal.

--
L'église est une secte qui a réussi.
Ernest Renan.

Avatar
Frantz Dorsemaine
Emmanuel Florac écrivait
news::

Le Sun, 25 Feb 2007 16:28:45 +0000, Frantz Dorsemaine a écrit :


Je récupere le non du fichier puis je le zip par
"$zip=Archive::Zip->new();", puis je l'encode certainement mal puis
je
l'insert, enfin j'essai ! dans la base de donnée. Et là, pas glop pas
glop.


Il faut donner le message d'erreur complet et exact, on n'a pas de
bouloe de cristal.



En fait mon erreur se situe au moment d'inserer les donnée dans le champs
LONGBLOG, c'est interprété comme une erreur de syntax (je pense que cela
vien du contenu des données à insérer.)

Frantz


Avatar
espie
In article ,
Frantz Dorsemaine wrote:
Emmanuel Florac écrivait
news::

Le Sun, 25 Feb 2007 16:28:45 +0000, Frantz Dorsemaine a écrit :


Je récupere le non du fichier puis je le zip par
"$zip=Archive::Zip->new();", puis je l'encode certainement mal puis
je
l'insert, enfin j'essai ! dans la base de donnée. Et là, pas glop pas
glop.


Il faut donner le message d'erreur complet et exact, on n'a pas de
bouloe de cristal.



En fait mon erreur se situe au moment d'inserer les donnée dans le champs
LONGBLOG, c'est interprété comme une erreur de syntax (je pense que cela
vien du contenu des données à insérer.)


Et si tu ne nous donnes pas le fragment de code que tu utilises, ni le
message d'erreur que tu obtiens, tu peux continuer a crier dans le desert,
on ne risque pas de t'aider.

Il y a tellement de trucs differents qui peuvent merdoyer dans ta manip,
est-ce que tu veux reellement de l'aide, ou juste pleurer que c'est trop
dur ? ;-)



Avatar
Frantz Dorsemaine
Emmanuel Florac écrivait
news::

Le Sun, 25 Feb 2007 16:28:45 +0000, Frantz Dorsemaine a écrit :


Je récupere le non du fichier puis je le zip par
"$zip=Archive::Zip->new();", puis je l'encode certainement mal puis
je


l'insert, enfin j'essai ! dans la base de donnée. Et là, pas glop pas
glop.


Il faut donner le message d'erreur complet et exact, on n'a pas de
bouloe

de cristal.



#Voici ma fonction d'encodage.
sub EncodeDoc {
$FichJoint="annuler.gif";
$zip=Archive::Zip->new();
$zip->addFile("$FichJoint");
my $fileEnc = "$FichJoint";

$zip->writeToFileNamed("$fileEnc");
my $stat = (stat $fileEnc)[2] or die "Couln't stat $fileIn: $!";
my($mode) = sprintf "%04o", $stat & 07777;
open (F, "$fileEnc") ; #or die "Couldn't open $fileIn: $!";
binmode(F, ":encoding(iso-8859-1)");

my $buff;
my $content;

while (read(F, $buff, 8 * 2**10)) {
$content.=$buff;
}
close(F);

&SqlInsertPieceJointe($content);
}

#Voici ma requete d'insertion qui me sort un message d'erreur de syntaxe.

sub SqlInsertPieceJointe {

my $Contenu=shift;

my $RqtInsertPieceJointe=$Base->prepare("INSERT INTO tb_piece_jointe
(
Contenu,
) VALUES (
'$Contenu'
)
");
$RqtInsertPieceJointe->execute or die($DBI::errstr);
}


Avatar
Frantz Dorsemaine
(Marc Espie) écrivait
news:ersha6$1h6s$:

In article ,
Frantz Dorsemaine wrote:
Emmanuel Florac écrivait
news::

Le Sun, 25 Feb 2007 16:28:45 +0000, Frantz Dorsemaine a écrit :


Je récupere le non du fichier puis je le zip par
"$zip=Archive::Zip->new();", puis je l'encode certainement mal
puis je
l'insert, enfin j'essai ! dans la base de donnée. Et là, pas glop
pas glop.


Il faut donner le message d'erreur complet et exact, on n'a pas de
bouloe de cristal.



En fait mon erreur se situe au moment d'inserer les donnée dans le
champs LONGBLOG, c'est interprété comme une erreur de syntax (je pense
que cela vien du contenu des données à insérer.)


Et si tu ne nous donnes pas le fragment de code que tu utilises, ni le
message d'erreur que tu obtiens, tu peux continuer a crier dans le
desert, on ne risque pas de t'aider.

Il y a tellement de trucs differents qui peuvent merdoyer dans ta
manip, est-ce que tu veux reellement de l'aide, ou juste pleurer que
c'est trop dur ? ;-)


#Voici ma fonction d'encodage.
sub EncodeDoc {
$FichJoint="annuler.gif";
$zip=Archive::Zip->new();
$zip->addFile("$FichJoint");
my $fileEnc = "$FichJoint";

$zip->writeToFileNamed("$fileEnc");
my $stat = (stat $fileEnc)[2] or die "Couln't stat $fileIn: $!";
my($mode) = sprintf "%04o", $stat & 07777;
open (F, "$fileEnc") ; #or die "Couldn't open $fileIn: $!";
binmode(F, ":encoding(iso-8859-1)");

my $buff;
my $content;

while (read(F, $buff, 8 * 2**10)) {
$content.=$buff;
}
close(F);

&SqlInsertPieceJointe($content);
}

#Voici ma requete d'insertion qui me sort un message d'erreur de syntaxe.

sub SqlInsertPieceJointe {

my $Contenu=shift;

my $RqtInsertPieceJointe=$Base->prepare("INSERT INTO tb_piece_jointe
(
Contenu,
) VALUES (
'$Contenu'
)
");
$RqtInsertPieceJointe->execute or die($DBI::errstr);
}




Avatar
espie
In article ,
Frantz Dorsemaine wrote:
sub SqlInsertPieceJointe {

my $Contenu=shift;

my $RqtInsertPieceJointe=$Base->prepare("INSERT INTO tb_piece_jointe
(
Contenu,
) VALUES (
'$Contenu'
)
");
$RqtInsertPieceJointe->execute or die($DBI::errstr);
}


Ouch, pas beau du tout ca. Deja, apprend a utiliser prepare avec des
placeholders, ca va aider...

my $st = $base->prepare("INSERT INTO tb_piece_jointe (Contenu) VALUES (?)");
$st ->execute($Contenu) or die($DBI::errstr);


(et puis bon, je pense pas que la virgule en trop t'aide).

Note qu'en general, c'est toujours tres mauvais de construire des requetes
avec parametres a la main. Il vaut mieux laisser faire $base->quote()
pour les valeurs, et $base->quote_identifier() pour les noms de table
et assimiles... et en mieux, utiliser des placeholder (le ?) quand on en
a la possibilite.

Avatar
Frantz Dorsemaine
(Marc Espie) écrivait
news:ersjhq$1hui$:

In article ,
Frantz Dorsemaine wrote:
sub SqlInsertPieceJointe {

my $Contenu=shift;

my $RqtInsertPieceJointe=$Base->prepare("INSERT INTO tb_piece_jointe (
Contenu,
) VALUES (
'$Contenu'
)
");
$RqtInsertPieceJointe->execute or die($DBI::errstr); }


Ouch, pas beau du tout ca. Deja, apprend a utiliser prepare avec des
placeholders, ca va aider...

my $st = $base->prepare("INSERT INTO tb_piece_jointe (Contenu) VALUES
(?)"); $st ->execute($Contenu) or die($DBI::errstr);


(et puis bon, je pense pas que la virgule en trop t'aide).

Note qu'en general, c'est toujours tres mauvais de construire des
requetes avec parametres a la main. Il vaut mieux laisser faire
$base->quote() pour les valeurs, et $base->quote_identifier() pour les
noms de table et assimiles... et en mieux, utiliser des placeholder
(le ?) quand on en a la possibilite.



D'apres les 1er test ca à l'aire d'aller beaucoup mieux. Je test grandeur
nature

Merci beaucoup.

Frantz DORSEMAINE


Avatar
Frantz Dorsemaine
(Marc Espie) écrivait
news:ersjhq$1hui$:

In article ,
Frantz Dorsemaine wrote:
sub SqlInsertPieceJointe {

my $Contenu=shift;

my $RqtInsertPieceJointe=$Base->prepare("INSERT INTO tb_piece_jointe
(
Contenu,
) VALUES (
'$Contenu'
)
");
$RqtInsertPieceJointe->execute or die($DBI::errstr);
}


Ouch, pas beau du tout ca. Deja, apprend a utiliser prepare avec des
placeholders, ca va aider...

my $st = $base->prepare("INSERT INTO tb_piece_jointe (Contenu) VALUES
(?)"); $st ->execute($Contenu) or die($DBI::errstr);


(et puis bon, je pense pas que la virgule en trop t'aide).

Note qu'en general, c'est toujours tres mauvais de construire des
requetes avec parametres a la main. Il vaut mieux laisser faire
$base->quote() pour les valeurs, et $base->quote_identifier() pour les
noms de table et assimiles... et en mieux, utiliser des placeholder
(le ?) quand on en a la possibilite.



Est-on limité par la taille des fichiers, de combien et comment détourné le
probleme car voici un autre message d'erreur sur un fichier faisant 1846 ko

Voici le message : substr outside of string at
c:/Perl/site/lib/Net/MySql.pm line 425.

Frantz DORSEMAINE


Avatar
Frantz Dorsemaine
Frantz Dorsemaine écrivait
news::

(Marc Espie) écrivait
news:ersjhq$1hui$:

In article ,
Frantz Dorsemaine wrote:
sub SqlInsertPieceJointe {

my $Contenu=shift;

my $RqtInsertPieceJointe=$Base->prepare("INSERT INTO tb_piece_jointe
( Contenu,
) VALUES (
'$Contenu'
)
");
$RqtInsertPieceJointe->execute or die($DBI::errstr); }


Ouch, pas beau du tout ca. Deja, apprend a utiliser prepare avec des
placeholders, ca va aider...

my $st = $base->prepare("INSERT INTO tb_piece_jointe (Contenu) VALUES
(?)"); $st ->execute($Contenu) or die($DBI::errstr);


(et puis bon, je pense pas que la virgule en trop t'aide).

Note qu'en general, c'est toujours tres mauvais de construire des
requetes avec parametres a la main. Il vaut mieux laisser faire
$base->quote() pour les valeurs, et $base->quote_identifier() pour
les noms de table et assimiles... et en mieux, utiliser des
placeholder (le ?) quand on en a la possibilite.



D'apres les 1er test ca à l'aire d'aller beaucoup mieux. Je test
grandeur nature

Merci beaucoup.

Frantz DORSEMAINE


Est-on limité par la taille des fichiers, de combien et comment détourné
le probleme car voici un autre message d'erreur sur un fichier faisant
1846 ko

Voici le message : substr outside of string at
c:/Perl/site/lib/Net/MySql.pm line 425.

Frantz DORSEMAINE