首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对所有列使用selectall

如何对所有列使用selectall
EN

Stack Overflow用户
提问于 2015-02-12 12:35:23
回答 1查看 1.3K关注 0票数 1

我想用selectall_hashref实现这个子例程。

代码语言:javascript
复制
sub query {
    use SQL::Abstract;
    my $sql = SQL::Abstract->new;
    my ($table, $fields, $where) = @_;
    my ($stmt, @bind) = $sql->select($table, $fields, $where);
    my $sth = $dbh->prepare($stmt);
    $sth->execute(@bind);
    my @rows;
    while(my @row = $sth->fetchrow_array() ) {
        my %data;
        @data{ @{$sth->{NAME}} } = @row;
        push @rows, \%data;
    }
    return \@rows;
}

不幸的是,selectall_hashref需要一个想要列的列表。有办法写类似我的第一个子程序吗?

显然,这是行不通的:

代码语言:javascript
复制
sub query {
   return $dbh->selectall_hashref(shift, q/*/);
}

预期的输出可以是哈希数组或散列哈希:

代码语言:javascript
复制
{ '1' => { column1 => 'foo', column2 => 'bar' }, 
  '2' => { column1 => '...', column2 => '...' },
  ... } 

代码语言:javascript
复制
[ { column1 => 'foo', column2 => 'bar' }, 
  { column1 => '...', column2 => '...' },
  ... ]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-12 13:06:47

你想要的是selectall_arrayref,而不是selectall_hashref。正是这样做的。

代码语言:javascript
复制
use DBI;
use Data::Printer;

my $dbh = DBI->connect('DBI:mysql:database=foo;', 'foo', 'bar');

my $foo = $dbh->selectall_arrayref(
  'select * from foo',
  { Slice => {} }
);

p $foo

__END__

\ [
    [0]   {
        id    1,
        baz   "",
    },
    [1]   {
        id    2,
        baz   "",

    },
]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28477638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档