Вашето използване на $db_config
променлива ми изглежда подозрително. Или хешът на конфигурацията ви е странен, или използвате стойности вместо ключове.
Не сте ни показали къде $db_config
е настроен, но предполагам, че изглежда по следния начин:
$db_config = {
name => 'Top_Data',
host => '127.0.0.1',
port => 3306,
username => 'someone',
password => 'a secret',
};
И тогава бихте го използвали така:
my $dsn = "DBI:mysql:database=".$db_config->{name}.";host=".$db_config->{host}.";port=".$db_config->{port};
Забележете, че използвах имената на ключовете (name
, host
и port
) вместо стойностите (Top_Data
, 127.0.0.1
и 3306
).
Ще отбележа също, че можете леко да опростите това, като използвате способността на Perl да разширява променливи вътре в низ в двойни кавички.
my $dsn = "DBI:mysql:database=$db_config->{name};host=$db_config->{host};port=$db_config->{port}";
По-късно има друг проблем, с вашия 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)';
Стойностите, които трябва да вмъкнете, са действителните елементи от данни. Така че там, където имате низовете "float", "varchar" или "date", всъщност трябва да имате елементи с данни (число с плаваща запетая, низ или дата).
И накрая, след като сте подготвили оператора си, не е необходимо да го предавате на execute()
метод. Трябва обаче да разгледате използването на точки за свързване във вашия SQL и предаване на вашите действителни елементи от данни към execute()
обаждане