Twoje użycie $db_config
zmienna wygląda podejrzanie. Albo Twój skrót konfiguracji jest dziwny, albo używasz wartości zamiast kluczy.
Nie pokazałeś nam, gdzie $db_config
jest skonfigurowany, ale myślę, że wygląda mniej więcej tak:
$db_config = {
name => 'Top_Data',
host => '127.0.0.1',
port => 3306,
username => 'someone',
password => 'a secret',
};
A potem użyjesz go w ten sposób:
my $dsn = "DBI:mysql:database=".$db_config->{name}.";host=".$db_config->{host}.";port=".$db_config->{port};
Zauważ, że użyłem nazw kluczy (name
, host
i port
) zamiast wartości (Top_Data
, 127.0.0.1
i 3306
).
Wskażę również, że możesz to nieco uprościć, używając zdolności Perla do rozszerzania zmiennych wewnątrz łańcucha z podwójnym cudzysłowem.
my $dsn = "DBI:mysql:database=$db_config->{name};host=$db_config->{host};port=$db_config->{port}";
Później pojawia się inny problem z instrukcją 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)';
Wartości, które należy wstawić, to rzeczywiste elementy danych. Jeśli więc masz ciągi „float”, „varchar” lub „date”, powinieneś mieć elementy danych (liczbę zmiennoprzecinkową, ciąg znaków lub datę).
Wreszcie, po przygotowaniu oświadczenia, nie musisz przekazywać go do execute()
metoda. Powinieneś jednak przyjrzeć się używaniu punktów wiązania w swoim SQL i przekazywaniu rzeczywistych elementów danych do execute()
zadzwoń