在Perl中将MySQL结果作为哈希表返回

4
在Perl中,我正在编写类似于以下的SQL查询语句:
SELECT `id`, `title`, `price` FROM `gamelist`

我希望的是将此查询结果转储到散列表中。我正在使用 DBI,目前只会执行以下操作:
my %results;
my $count = 0;
while( @result = $statement->fetchrow() ){
    %results{'id'}[$count] = $result[0];
    %results{'title'}[$count] = $result[1];
    %results{'price'}[$count] = $result[2];
    $count++;
}

然而我不喜欢使用$result[0],并相信第一个字段就是ID。我更愿意有这样的东西:

my %results;
my $count = 0;
while( %result = $statement->fetchrow_as_hashtable() ){
    %results{'id'}[$count] = %result{'id'};
    %results{'title'}[$count] = %result{'title'};
    %results{'price'}[$count] = %result{'price'};
    $count++;
}

我在谷歌上搜索了很久,但没有找到DBI/Perl相关的好答案。我确实找到了一个开源类,提供了这个功能,但是我觉得应该不需要使用别人的类就能实现。


2
Google并不是寻找随机Perl特性帮助的最佳场所 - 因为网络上有很多糟糕的Perl信息。你最好在CPAN(http://metacpan.org/)或Perldoc(http://perldoc.perl.org/)搜索。 - Dave Cross
3个回答

9

5
while (my $result = $statement->fetchrow_hashref) {
        print $result->{id};
        print $result->{title};
        print $result->{price};
}

使用fetchrow_hashref可以直接将结果存储在哈希表中。

1
我以为他会知道如何使用它,他的问题包含一个基本上可以通过更改方法名称和取消引用来解决的示例。 - Joel Berger

4

请参考 DBI 文档,了解如何使用 selectall_arrayref 方法:

 $rows = $dbh->selectall_arrayref($query, {Slice=>{}}, @params)

$rows 是一组散列的数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接