sql >> Base de Datos >  >> RDS >> Mysql

Insertar datos de Perl a MysQL

Su uso de $db_config la variable me parece sospechosa. O su hash de configuración es extraño o está usando valores en lugar de claves.

No nos has mostrado dónde $db_config está configurado, pero supongo que se parece a esto:

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

Y luego lo usarías así:

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

Observe que he usado los nombres de clave (name , host y port ) en lugar de los valores (Top_Data , 127.0.0.1 y 3306 ).

También señalaré que puede simplificar esto un poco utilizando la capacidad de Perl para expandir variables dentro de una cadena entre comillas dobles.

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

Hay otro problema más adelante, con su declaración 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)';

Los valores que debe insertar son los elementos de datos reales. Entonces, donde tiene las cadenas "flotante", "varchar" o "fecha", debería tener elementos de datos (un número de coma flotante, una cadena o una fecha).

Finalmente, habiendo preparado su declaración, no necesita pasarla a execute() método. Sin embargo, debe considerar el uso de puntos de enlace en su SQL y pasar sus elementos de datos reales a execute() llamar