$dbh->quote("t"): erreur sur interprétation dans MySQL

Le
ctobini
Bonjour,

Je suis en train d'écrire un script DBI de connection vers une base
MySQL 5.0.

J'ai utilisé dans le shell MySQL la commande LOAD DATA LOCAL INFILE
qui marche correctement.

En revanche, lorsque je saisi :

my $sth = $dbh->do
(
sprintf
(
"
LOAD DATA LOCAL INFILE %s
INTO TABLE cel_tmp
FIELDS TERMINATED BY 't'
ENCLOSED BY ''
LINES TERMINATED BY ''
",
$dbh->quote($name),
$dbh->quote("t"),
$dbh->quote("''"),
$dbh->quote("")
"
)
) ;

J'ai comme message d'erreur :

DBD::mysql::db do failed: Duplicate entry '102-2_GW.CEL' for key 2
at ./feed_cels_load.pl line 15.

Je pense que sprintf et $dbh->quote font que les argument ne sont pas
bien passés à MySQL.

Sauriez-vous comment y remédier ?

En vous remerciant,

C. Tobini
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-Baptiste Mazon
Le #153336
(sans aller chercher trop profond côté DBI, j'y connais rien)

ctobini
sprintf
(
"
LOAD DATA LOCAL INFILE %s
INTO TABLE cel_tmp
FIELDS TERMINATED BY 't'
ENCLOSED BY ''
LINES TERMINATED BY 'n'
",
$dbh->quote($name),
$dbh->quote("t"),
$dbh->quote("''"),
$dbh->quote("n")
"
)
) ;


En remplaçant pour simplifier quote par uc, le code est plus ou moins
équivalent au suivant:

printf '%s machin bidule', uc 'truc', uc 'machin', uc 'bidule';
-> TRUC machin bidule

L'effet recherché serait à mon sens obtenu avec ce genre d'appel:

printf '%s %s %s', uc 'truc', uc 'machin', uc 'bidule';
-> TRUC MACHIN BIDULE

ctobini
Le #153335
Bonjour et merci de la réponse,

Je me suis trompé sur l'erreur, désolé.

En fait le problème est que :

$dbh->quote("t");

ne reconnait pas t dans la requête SQL, il y a un problème de
formatage apparement.

C. Tobini

En remplaçant pour simplifier quote par uc, le code est plus ou moins
équivalent au suivant:

printf '%s machin bidule', uc 'truc', uc 'machin', uc 'bidule';
-> TRUC machin bidule

L'effet recherché serait à mon sens obtenu avec ce genre d'appel:

printf '%s %s %s', uc 'truc', uc 'machin', uc 'bidule';
-> TRUC MACHIN BIDULE


Publicité
Poster une réponse
Anonyme