Penggunaan Anda atas $db_config
variabel terlihat mencurigakan bagi saya. Entah hash konfigurasi Anda aneh, atau Anda menggunakan nilai alih-alih kunci.
Anda belum menunjukkan kepada kami di mana $db_config
sudah diatur, tapi saya kira itu terlihat seperti ini:
$db_config = {
name => 'Top_Data',
host => '127.0.0.1',
port => 3306,
username => 'someone',
password => 'a secret',
};
Dan kemudian Anda akan menggunakannya seperti ini:
my $dsn = "DBI:mysql:database=".$db_config->{name}.";host=".$db_config->{host}.";port=".$db_config->{port};
Perhatikan bahwa saya telah menggunakan nama kunci (name
, host
dan port
) bukan nilai (Top_Data
, 127.0.0.1
dan 3306
).
Saya juga akan menunjukkan bahwa Anda dapat menyederhanakan ini sedikit dengan menggunakan kemampuan Perl untuk memperluas variabel di dalam string bertanda kutip ganda.
my $dsn = "DBI:mysql:database=$db_config->{name};host=$db_config->{host};port=$db_config->{port}";
Ada masalah lain nanti, dengan pernyataan SQL Anda.
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)';
Nilai yang harus Anda sisipkan adalah item data aktual. Jadi di mana Anda memiliki string "float", "varchar" atau "date", Anda seharusnya memiliki item data (angka floating-point, string, atau tanggal).
Terakhir, setelah menyiapkan pernyataan Anda, Anda tidak perlu meneruskannya ke execute()
metode. Namun, Anda harus melihat penggunaan titik pengikat dalam SQL Anda dan meneruskan item data aktual Anda ke execute()
telepon