0

我有 MYSQL 数据库,其字段名称包含连字符。尝试使用 Perl 将数据从 XML 插入数据库。我在 %HEAD 中有 XML 键是列标题,值是相应的数据。

my %HEAD= ('REGISTRATION-NUMBER' => 'AAACT2727QXM003',
           'RETURN-YEAR' => '2013', 
           'MONTH' => 'July', 
           'LTU' => 'Yes',
           'NIL-RETURN' => 'No',
           'ASSESSEE-NAME' => 'TATA MOTORS LIMITED');

my @HEADER_keys= keys %HEAD;


foreach $key(@HEADER_keys) {    
    $value= $HEAD{$key};
    my $sth = $dbh->prepare("INSERT INTO indirect_taxes($key) VALUES ($value)");
    $sth->execute() or die $sth->errstr;
}

或代替 foreach

my @HEADER_values= values %HEAD;
my $sth = $dbh->prepare("INSERT INTO indirect_taxes(?) VALUES (?)");

$sth->execute_array(\@HEADER_keys, \@HEADER_values) or die "the failure cause: $DBI::errstr";

由于键包含连字符,我收到 MYSQL 语法错误。From表字段可以包含连字符吗?

得到了语法,但使用 perl 无法将反引号添加到变量 $key 或 @HEADER_keys。

请建议一种将反引号添加到 $keys 的方法。

4

1 回答 1

3

尝试回贴$key并使用 sql 占位符?来避免sql 注入

foreach my $key(keys %HEAD) {
  my $sql = sprintf("INSERT INTO indirect_taxes (%s) VALUES (?)",
      $dbh->quote_identifier($key));
  my $sth = $dbh->prepare($sql);
  $sth->execute($HEAD{$key})
      or die $sth->errstr;
}
于 2013-09-13T10:16:39.297 回答