Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Einfügen von Daten aus Perl in MysQL

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