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

Posted

技术标签:

【中文标题】在 Perl 中将 MySQL 结果作为哈希表返回【英文标题】:Returning MySQL results as hash tables in Perl 【发布时间】:2011-12-08 23:26:38 【问题描述】:

在 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 中找不到很多好的答案。我确实找到了一个提供此功能的开源类,但我觉得这应该可以不使用其他人的类。

【问题讨论】:

Google 并不是在随机 Perl 功能上搜索帮助的最佳位置 - 因为网络上有很多糟糕的 Perl 信息。你最好在 CPAN (metacpan.org) 或 Perldoc (perldoc.perl.org) 上搜索。 【参考方案1】:

fetchrow_hashref 呢?

【讨论】:

这正是我想要的。谢谢。【参考方案2】:
while (my $result = $statement->fetchrow_hashref) 
        print $result->id;
        print $result->title;
        print $result->price;

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

【讨论】:

我以为他会知道如何使用它,他的问题包含一个基本上适用于方法名称更改和取消引用的示例。【参考方案3】:

请参阅 DBI 文档以了解如何使用 selectall_arrayref

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

$rows 是一个哈希数组。

【讨论】:

以上是关于在 Perl 中将 MySQL 结果作为哈希表返回的主要内容,如果未能解决你的问题,请参考以下文章

在 Perl 中如何使用变量作为哈希键?

功能:表作为返回值

小白学Perl之初始哈希

如何在 MySQL/MariaDB 中将 LONGTEXT 字段作为 JSON 返回

是否可以在 Perl 中保留哈希表的大小?

无法在 Perl 循环中访问哈希查找表