fetchall_arrayref中的foreach值

时间:2013-10-18 14:29:28

标签: perl dbi

我正在尝试为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的值。最终我想用每个值运行一个查询,但是一旦我开始工作,我就可以解决这个问题。

感谢您的帮助。

3 个答案:

答案 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");
}