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

时间:2011-10-17 01:55:31

标签: mysql perl hashtable

在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++;
}

我尝试在Google上四处寻找,但在DBI / Perl中找不到很多好的答案。我确实找到了一个提供此功能的开源类,但我觉得这应该可以在不使用其他人的课程的情况下实现。

3 个答案:

答案 0 :(得分:9)

fetchrow_hashref怎么办?

答案 1 :(得分:5)

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

使用fetchrow_hashref直接将结果放在哈希

答案 2 :(得分:4)

请参阅DBI文档,了解selectall_arrayref的使用情况:

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

$rows是一个哈希数组。