Mysql
 sql >> Base de données >  >> RDS >> Mysql

Insertion de données de Perl dans MysQL

Votre utilisation de $db_config la variable me semble suspecte. Soit votre hachage de configuration est étrange, soit vous utilisez des valeurs au lieu de clés.

Vous ne nous avez pas montré où $db_config est configuré, mais je suppose qu'il ressemble à ceci :

$db_config = {
  name => 'Top_Data',
  host => '127.0.0.1',
  port => 3306,
  username => 'someone',
  password => 'a secret',
};

Et puis vous l'utiliseriez comme ceci :

my $dsn = "DBI:mysql:database=".$db_config->{name}.";host=".$db_config->{host}.";port=".$db_config->{port};

Notez que j'ai utilisé les noms de clé (name , host et port ) au lieu des valeurs (Top_Data , 127.0.0.1 et 3306 ).

Je soulignerai également que vous pouvez simplifier légèrement cela en utilisant la capacité de Perl à développer des variables à l'intérieur d'une chaîne entre guillemets.

my $dsn = "DBI:mysql:database=$db_config->{name};host=$db_config->{host};port=$db_config->{port}";

Il y a un autre problème plus tard, avec votre instruction SQL.

my $sql = 'insert into Top(Load_Average, CPU_us, CPU_id, CPU-wa, CPU_hi, 
           CPU_si, CPU_st, Swap_Total, Swap_Free, Swap_Used, Memory_Total, 
           Memeory_Free, Memory_Used, Memory_Buff, Date) 
           values(float,float,float,float,float,float,float,float,
           varchar,varchar,varchar,varchar,varchar,varchar,date)';

Les valeurs que vous devez insérer sont les éléments de données réels. Ainsi, là où vous avez les chaînes "float", "varchar" ou "date", vous devriez en fait avoir des éléments de données (un nombre à virgule flottante, une chaîne ou une date).

Enfin, après avoir préparé votre instruction, vous n'avez pas besoin de la passer à execute() méthode. Vous devriez cependant envisager d'utiliser des points de liaison dans votre SQL et de transmettre vos éléments de données réels au execute() appeler