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

Indsættelse af data fra Perl til MysQL

Din brug af $db_config variabel ser mistænkelig ud for mig. Enten er din config-hash mærkelig, eller også bruger du værdier i stedet for nøgler.

Du har ikke vist os, hvor $db_config er sat op, men jeg vil gætte på, at det ser sådan ud:

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

Og så ville du bruge det sådan her:

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

Bemærk, at jeg har brugt nøglenavnene (name , host og port ) i stedet for værdierne (Top_Data , 127.0.0.1 og 3306 ).

Jeg vil også påpege, at du kan forenkle dette lidt ved at bruge Perls evne til at udvide variabler inde i en streng med dobbelte citater.

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

Der er et andet problem senere, med din SQL-sætning.

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)';

De værdier, du skal indsætte, er de faktiske dataelementer. Så hvor du har strengene "flydende", "varchar" eller "dato", burde du faktisk have dataelementer (et flydende kommatal, en streng eller en dato).

Endelig, efter at have forberedt din erklæring, behøver du ikke at videregive den til execute() metode. Du bør dog se på at bruge bindepunkter i din SQL og sende dine faktiske dataelementer til execute() ring




  1. Vælg de højeste 3 scores på hver dag for hver bruger

  2. REPLACE() Funktion i Oracle

  3. Oracle Database Security – Kryptering og dekryptering

  4. Få resterende dage, timer og minutter ved at bruge mySql