Il tuo uso di $db_config
la variabile mi sembra sospetta. O il tuo hash di configurazione è strano o stai usando valori invece di chiavi.
Non ci hai mostrato dove $db_config
è impostato, ma suppongo che assomigli a questo:
$db_config = {
name => 'Top_Data',
host => '127.0.0.1',
port => 3306,
username => 'someone',
password => 'a secret',
};
E poi lo useresti in questo modo:
my $dsn = "DBI:mysql:database=".$db_config->{name}.";host=".$db_config->{host}.";port=".$db_config->{port};
Nota che ho usato i nomi delle chiavi (name
, host
e port
) invece dei valori (Top_Data
, 127.0.0.1
e 3306
).
Sottolineerò anche che puoi semplificare leggermente questo utilizzando la capacità di Perl di espandere le variabili all'interno di una stringa tra virgolette doppie.
my $dsn = "DBI:mysql:database=$db_config->{name};host=$db_config->{host};port=$db_config->{port}";
C'è un altro problema più avanti, con la tua istruzione 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)';
I valori da inserire sono gli elementi di dati effettivi. Quindi, dove hai le stringhe "float", "varchar" o "date", dovresti effettivamente avere elementi di dati (un numero a virgola mobile, una stringa o una data).
Infine, dopo aver preparato la tua istruzione, non è necessario passarla a execute()
metodo. Dovresti, tuttavia, considerare l'utilizzo dei punti di collegamento nel tuo SQL e il passaggio dei tuoi elementi di dati effettivi a execute()
chiama