簡體   English   中英

將數據從Perl插入MysQL

[英]Inserting Data From Perl To MysQL

我已經將MySQL連接到數據庫,但是問題是我在將數據從Perl插入Mysql時遇到了一些問題。

彈出的錯誤是:

Use of uninitialized value in concatenation (.) or string at ./etl_server_info.pl line 204, (Which is the connection of the database ) 

DBD::mysql::st execute failed: called with 1 bind variables when 0 are needed at ($stmt->execute($sql);) 
sub insert_record(){

 my($data,$db_config)=@_;
 my $result = -1; # -1 fail;  0 - succ

  # connect to db
  # connect to MySQL database
  my $dsn = "DBI:mysql:database=".$db_config->{'Top_Data'}.";host=".$db_config->{'127.0.0.1'}.";port=".$db_config->{'3306'};
my $username = $db_config->{'username'};
my $password = $db_config->{'password'};

my %attr = (PrintError=>0,RaiseError=>1 );
my $dbh = DBI->connect($dsn,$username,$password,\%attr) or die $DBI::errstr;

print "We Have Successfully Connected To The Database \n";

  # prepare sql statement
  # execute insert
  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)';




  my $stmt =$dbh->prepare($sql) or die "Its A Fail" . $dbh->errstr();
  $stmt->execute($sql);



  $stmt->finish();
  $dbh->disconnect();
  $result = 0;
  return($result);

您對$db_config變量的使用對我來說很可疑。 您的配置哈希值很奇怪,或者您使用的是值而不是鍵。

您尚未向我們展示$db_config的設置位置,但我想它看起來像這樣:

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

然后您可以像這樣使用它:

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

注意,我使用了鍵名( namehostport )而不是值( Top_Data127.0.0.13306 )。

我還將指出,您可以通過使用Perl在雙引號字符串內擴展變量的功能來稍微簡化一下。

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

稍后,您的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)';

您應該插入的值是實際的數據項。 因此,在具有字符串“ float”,“ varchar”或“ date”的地方,實際上應該具有數據項(浮點數,字符串或日期)。

最后,准備好語句后,無需將其傳遞給execute()方法。 但是,您應該查看在SQL中使用綁定點並將實際數據項傳遞給execute()調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM