我正在尝试为fetchall_arrayref中的每个值执行一个foreach循环,并且遇到了一些麻烦。
我有:
my $list = $sth->fetchall_arrayref({});
print Dumper($list);
给了我:
$VAR1 = [
{
'ID_NUMBER' => '123'
},
{
'ID_NUMBER' => '456'
},
{
'ID_NUMBER' => '5666'
},
{
'ID_NUMBER' => '45645'
},
{
'ID_NUMBER' => '23422'
}
];
我不确定如何格式化我的foreach循环打印每个id_number的值。最终我想用每个值运行一个查询,但是一旦我开始工作,我就可以解决这个问题。
感谢您的帮助。
答案 0 :(得分:6)
您应该使用fetchrow_hashref
代替,并分别执行每项操作。这将使它更具可读性,并且从数据库的角度来看它不会影响性能。
while (my $res = $sth->fetchrow_hashref) {
print Dumper $res;
$sth2->execute($res->{ID_NUMBER});
}
如果您想使用fetchall_arrayref
进行此操作,则可以这样工作:
my $list = $sth->fetchall_arrayref({});
foreach my $res (@{ $list }) {
$sth2->execute($res->{ID_NUMBER});
}
答案 1 :(得分:1)
您所拥有的是对哈希引用数组的引用。
让我们打破这个:
$list
是对数组的引用。我可以通过在它之前放置正确的解除引用符号来引用它。您可以使用@$list
或@{ $list }
来获取数组。我喜欢后者,因为它使得这个参考非常明确。
for my $row_ref ( @{ $list } ) {
here be dragons... # We'll figure this out later...
}
$row_ref
是对哈希的引用。我们可以通过将%
置于前面%{ $row_ref }
来再次获取哈希值。因此,我们可以使用%{ $row_ref }{$key}
来获取值。但是,该语法很难阅读。我们可以使用看似如下的替代->
:$row_ref->{$key}
。这更容易看到。我们也知道有一个密钥,密钥是ID_NUMBER
:
for my $row_ref ( @{ $list } ) {
print "ID Number: " . $row_ref->{ID_NUMBER} . "\n";
}
或者,如果您不确定列名称:
for my $row_ref ( @{ $list } ) {
for my $column ( sort keys %{ $row_ref } ) {
print "$column: " . $row_ref->{$column} . "\n";
}
}
如果您不熟悉参考文献,请阅读Perl tutorial。
答案 2 :(得分:0)
你有一系列哈希。如果您使用描述性变量名称会有所帮助。
my $rows = $sth->fetchall_arrayref({});;
for my $row (@$rows) {
print($row->{ID_NUMBER}, "\n");
}