OVH Cloud OVH Cloud

Mysql variable dynamique : code propre

1 réponse
Avatar
Fifre
Bonjour,


J'ai le code suivant :


my $host="13.34.1.150";
my $database ="info";
my $user ="USER";
my $password ="FRIEND";



my $mysql_connect = Net::MySQL->new(
hostname => $host,
database => $database,
user => $user,
password => $password,
);

my $Load ="LOAD DATA INFILE \"e:/perl/INFO/CLIENT.txt\" INTO TABLE
info.client FIELDS TERMINATED BY ';' LINES TERMINATED BY '\\n'";
#my $Load = "LOAD DATA INFILE 'e:/perl/INFO/CLIENT.txt' INTO TABLE
info.client FIELDS TERMINATED BY ';' LINES TERMINATED BY '\\n'";

$mysql_connect->query(q{LOAD DATA INFILE "e:/perl/INFO/CLIENT.txt" INTO
TABLE info.client FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'});
#$mysql_connect->query(q{$Load} ); #************************** PAR CONTRE
CELA NE FONCTIONNE PAS ***********************
print $Load;
die $mysql_connect->get_error_message if $mysql_connect->is_error;



# my $record_set = $mysql_connect->create_record_iterator;
# while (my $record = $record_set->each) {
# printf "First column: %s\t Next column: %s\t Proche column: %s\n",
# $record->[0], $record->[1],$record->[2];
# }
$mysql_connect->close;

Ce code fonctionne mais n'est pas satisfaisant.
Lorsque j'utilise la variabe $Load j'obtiens ce message.
Check the manual that corresponds to your MySQL server version for the right
syn
tax to use near '$Load' at line 1 at infocentre.pl line 65.

Mon script perd de l'interet si je ne peux pas créer dynamiquement la
variable Load.
Avez vous une idée.

F.

1 réponse

Avatar
Fifre
Bonjour,

Merci.
Je suis parti me fouetter dans un coin avant de répondre.

Sous mysql (comme sous oracle si mes souvenirs sont bons) cela permet de
charger un fichier avec un séparateur défini dans une table (définie elle
aussi)

Par rapport à ce script cela charge le fichier client txt dans la table
client.
De mon point de vue plus rapide que de faire lire le fichier et faire des
inserts.

F.



"Jedaï" a écrit dans le message de
news:bgb52n$suv$
Fifre wrote:
Bonjour,


J'ai le code suivant :


my $host="13.34.1.150";
my $database ="info";
my $user ="USER";
my $password ="FRIEND";



my $mysql_connect = Net::MySQL->new(
hostname => $host,
database => $database,
user => $user,
password => $password,
);

my $Load ="LOAD DATA INFILE "e:/perl/INFO/CLIENT.txt" INTO TABLE
info.client FIELDS TERMINATED BY ';' LINES TERMINATED BY 'n'";
#my $Load = "LOAD DATA INFILE 'e:/perl/INFO/CLIENT.txt' INTO TABLE
info.client FIELDS TERMINATED BY ';' LINES TERMINATED BY 'n'";

$mysql_connect->query(q{LOAD DATA INFILE "e:/perl/INFO/CLIENT.txt" INTO
TABLE info.client FIELDS TERMINATED BY ';' LINES TERMINATED BY 'n'});
#$mysql_connect->query(q{$Load} ); #************************** PAR
CONTRE


CELA NE FONCTIONNE PAS ***********************
print $Load;
die $mysql_connect->get_error_message if $mysql_connect->is_error;



# my $record_set = $mysql_connect->create_record_iterator;
# while (my $record = $record_set->each) {
# printf "First column: %st Next column: %st Proche column: %sn",
# $record->[0], $record->[1],$record->[2];
# }
$mysql_connect->close;

Ce code fonctionne mais n'est pas satisfaisant.
Lorsque j'utilise la variabe $Load j'obtiens ce message.
Check the manual that corresponds to your MySQL server version for the
right


syn
tax to use near '$Load' at line 1 at infocentre.pl line 65.

Mon script perd de l'interet si je ne peux pas créer dynamiquement la
variable Load.
Avez vous une idée.

F.



Nomal ! q// correspond à des apostrophes normales "'", donc Perl

n'interpole pas $Load.... Je me demande ce que peut bien donner en SQL
la requète '$Load' ? ;)
Donc rajoute un q (qq// est équivalent à un double quote '"') ou mets
directement des double quotes pour que ta variable soit interpolé ou
carrément laisse ta variable comme ça, vu que c'est une string ça ne
posera pas problème :

$mysql_connect->query( $Load );

Voilà :)