mysql - 将数据从 Perl 插入到 MySQL

标签 mysql perl

我已经将 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”时,您实际上应该有数据项( float 、字符串或日期)。

最后,准备好语句后,您不需要将其传递给 execute() 方法。但是,您应该考虑在 SQL 中使用绑定(bind)点并将实际数据项传递给 execute() 调用

关于mysql - 将数据从 Perl 插入到 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57470682/

相关文章:

javascript - 通过PHP代码查找扫描器状态

mysql - 使用delphi xe3和mysql数据库进行Sql插入

linux - 如何使用正则表达式判断一个文件是否包含ISBN系列?

Perl:我如何写入 bin 以外的目录?

regex - 如何使Perl处理模式 “c++”与grep相同?

python - 如何使用 Django 连接

php - WordPress mysql 查询不接受变量

mysql - 黑盒 SQLi : MySql “error in your SQL syntax” when larger “UNSIGNED BIGINT”

perl - 草莓 perl CPAN dmake 不会构建

Perl-如何在每个大写字母之前插入空格(第一次出现或现有的除外)?