如何使用Perl的DBI在列中插入哈希值?

时间:2009-11-30 20:09:43

标签: perl dbi

我有一个哈希,我正在尝试将其值插入数据库。哈希定义如下:

my %hash = (
            1   =>  'First Word',
            2   =>  'Second Word is correct',
            0   =>  'Third word does not exist',
            );

我不知道如何使用哈希值在数据库中插入值。我注意到我的问题类似于this问题。但是,没有一个答案似乎是正确的。在使用任何列出的答案时,不插入散列中的值,而是插入对散列的引用,即ARRAY(0x9e63b30)。但是当我print Dumper @values时,值会被打印而不是参考值。

有关如何插入值而非参考值的任何建议?而且,question的答案中列出的解决方案出了什么问题。

@values的定义与this问题相同,即

my @values = values %hash;

编辑: Db结构:

T1:

sid  sentence
1    First Word
2    Second Word is correct
0    Third word does not exist
上面sid中的

是哈希的keys,句子是哈希的values

这是我尝试过的(这是question的答案之一):

my @keys = keys %hash;

my @values = values %hash;

my $sth = $dbh->prepare("INSERT INTO T1(sid, sentence) VALUES (?,?);");

$sth->execute_array({},\@keys, \@values);

再次插入@values时会插入参考值。

编辑:

_ OUTPUT _

$VAR1 = 'First Word';
$VAR2 = 'Third word does not exist';
$VAR3 = 'Second Word is correct';

_ 代码 _ 这是我如何将值插入%hash

my $x=0;
foreach my $file(@files){
        if ($file =~ /regex/){
                push(@{$hash{$x}}, "$1 $2 $3 $4 $5 $6 $7"); 
        }
        elsif ($file =~ /regex/){
                push(@{$hash{$x}}, "$1 $2 $3 $4 $5 $6");
        }
        elseif ($file =~ /Hs_(.+)_(.+)_(.+)_(.+)_(.+)_W.+txt/){
                push (@{$hash{$x}}, "$1 $2 $3 $4 $5");
        }
$x++;
}

4 个答案:

答案 0 :(得分:2)

这不是你最初发布的!!!你有一个对数组的引用哈希。阅读perl参考教程(perlreftut)以了解它们。

(使用命令

perldoc perlreftut

访问本教程)

答案 1 :(得分:0)

我在另一个thread上的回复你已经链接到作品。我测试了它并且多次使用它。它不使用execute_array(),只执行execute()。

答案 2 :(得分:0)

这应该有用。

my $key;
my $value;
while (($key, $value) = each %hash) {
    $sth->bind_param(1, $key);
    $sth->bind_param(2, $value);
    $sth->execute();
}

答案 3 :(得分:0)

<强>更新

我建议您从上一个thread中获取一个功能示例,并使用您的数据库在计算机上运行它。一旦您可以使用其中一个示例,那么您应该能够修复自己的代码。


以前的回答:

我对使用execute_array()的其他thread的回复也有效,我在发布之前对其进行了测试。