Ihre Verwendung von $db_config
Variable sieht mir verdächtig aus. Entweder ist Ihr Konfigurations-Hash seltsam, oder Sie verwenden Werte anstelle von Schlüsseln.
Sie haben uns nicht gezeigt, wo $db_config
eingerichtet ist, aber ich vermute, es sieht ungefähr so aus:
$db_config = {
name => 'Top_Data',
host => '127.0.0.1',
port => 3306,
username => 'someone',
password => 'a secret',
};
Und dann würden Sie es so verwenden:
my $dsn = "DBI:mysql:database=".$db_config->{name}.";host=".$db_config->{host}.";port=".$db_config->{port};
Beachten Sie, dass ich die Schlüsselnamen verwendet habe (name
, host
und port
) anstelle der Werte (Top_Data
, 127.0.0.1
und 3306
).
Ich möchte auch darauf hinweisen, dass Sie dies etwas vereinfachen können, indem Sie die Fähigkeit von Perl nutzen, Variablen innerhalb einer Zeichenfolge in doppelten Anführungszeichen zu erweitern.
my $dsn = "DBI:mysql:database=$db_config->{name};host=$db_config->{host};port=$db_config->{port}";
Später gibt es ein weiteres Problem mit Ihrer SQL-Anweisung.
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)';
Die Werte, die Sie einfügen sollten, sind die eigentlichen Datenelemente. Wo Sie also die Zeichenfolgen „float“, „varchar“ oder „date“ haben, sollten Sie eigentlich Datenelemente haben (eine Fließkommazahl, eine Zeichenfolge oder ein Datum).
Nachdem Sie Ihre Anweisung vorbereitet haben, müssen Sie sie schließlich nicht an execute()
übergeben Methode. Sie sollten sich jedoch die Verwendung von Bindepunkten in Ihrem SQL ansehen und Ihre eigentlichen Datenelemente an execute()
übergeben anrufen