Seu uso do
$db_config
variável parece suspeito para mim. Ou seu hash de configuração é estranho ou você está usando valores em vez de chaves. Você não nos mostrou onde
$db_config
está configurado, mas eu acho que se parece com isso:$db_config = {
name => 'Top_Data',
host => '127.0.0.1',
port => 3306,
username => 'someone',
password => 'a secret',
};
E então você usaria assim:
my $dsn = "DBI:mysql:database=".$db_config->{name}.";host=".$db_config->{host}.";port=".$db_config->{port};
Observe que usei os nomes das chaves (
name
, host
e port
) em vez dos valores (Top_Data
, 127.0.0.1
e 3306
). Também indicarei que você pode simplificar isso um pouco usando a capacidade do Perl de expandir variáveis dentro de uma string com aspas duplas.
my $dsn = "DBI:mysql:database=$db_config->{name};host=$db_config->{host};port=$db_config->{port}";
Há outro problema mais tarde, com sua instrução 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)';
Os valores que você deve inserir são os itens de dados reais. Então, onde você tem as strings "float", "varchar" ou "date", você deve realmente ter itens de dados (um número de ponto flutuante, uma string ou uma data).
Finalmente, tendo preparado sua declaração, você não precisa passá-la para o
execute()
método. Você deve, no entanto, usar pontos de ligação em seu SQL e passar seus itens de dados reais para o execute()
ligar