Uw gebruik van de $db_config
variabele lijkt me verdacht. Of je config-hash is vreemd, of je gebruikt waarden in plaats van sleutels.
Je hebt ons niet laten zien waar $db_config
is ingesteld, maar ik vermoed dat het er ongeveer zo uitziet:
$db_config = {
name => 'Top_Data',
host => '127.0.0.1',
port => 3306,
username => 'someone',
password => 'a secret',
};
En dan zou je het als volgt gebruiken:
my $dsn = "DBI:mysql:database=".$db_config->{name}.";host=".$db_config->{host}.";port=".$db_config->{port};
Merk op dat ik de sleutelnamen heb gebruikt (name
, host
en port
) in plaats van de waarden (Top_Data
, 127.0.0.1
en 3306
).
Ik zal je er ook op wijzen dat je dit enigszins kunt vereenvoudigen door Perl's mogelijkheid te gebruiken om variabelen uit te breiden binnen een string met dubbele aanhalingstekens.
my $dsn = "DBI:mysql:database=$db_config->{name};host=$db_config->{host};port=$db_config->{port}";
Er is later nog een probleem met je SQL-statement.
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)';
De waarden die u zou moeten invoegen, zijn de feitelijke gegevensitems. Dus waar je de strings "float", "varchar" of "date" hebt, zou je eigenlijk data-items moeten hebben (een getal met drijvende komma, een string of een datum).
Tot slot, nadat u uw verklaring hebt voorbereid, hoeft u deze niet door te geven aan de execute()
methode. U moet echter kijken naar het gebruik van bindpunten in uw SQL en het doorgeven van uw feitelijke gegevensitems aan de execute()
bel