Mysql
 sql >> Database >  >> RDS >> Mysql

Inserimento di dati da Perl a MysQL

Il tuo uso di $db_config la variabile mi sembra sospetta. O il tuo hash di configurazione è strano o stai usando valori invece di chiavi.

Non ci hai mostrato dove $db_config è impostato, ma suppongo che assomigli a questo:

$db_config = {
  name => 'Top_Data',
  host => '127.0.0.1',
  port => 3306,
  username => 'someone',
  password => 'a secret',
};

E poi lo useresti in questo modo:

my $dsn = "DBI:mysql:database=".$db_config->{name}.";host=".$db_config->{host}.";port=".$db_config->{port};

Nota che ho usato i nomi delle chiavi (name , host e port ) invece dei valori (Top_Data , 127.0.0.1 e 3306 ).

Sottolineerò anche che puoi semplificare leggermente questo utilizzando la capacità di Perl di espandere le variabili all'interno di una stringa tra virgolette doppie.

my $dsn = "DBI:mysql:database=$db_config->{name};host=$db_config->{host};port=$db_config->{port}";

C'è un altro problema più avanti, con la tua istruzione 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)';

I valori da inserire sono gli elementi di dati effettivi. Quindi, dove hai le stringhe "float", "varchar" o "date", dovresti effettivamente avere elementi di dati (un numero a virgola mobile, una stringa o una data).

Infine, dopo aver preparato la tua istruzione, non è necessario passarla a execute() metodo. Dovresti, tuttavia, considerare l'utilizzo dei punti di collegamento nel tuo SQL e il passaggio dei tuoi elementi di dati effettivi a execute() chiama