perl - 以 HashMap 形式检索数据库行

标签 perl dbi

我是 Perl 新手(主要是 PHP 背景),想知道是否可以使用 DBI 以与 PHP 类似的输出方式检索数据库行。这是一个包含哈希值的数组,哈希值名称作为数据库列名称。即类似:

[0] -> {
    'firstname' -> 'mark',
    'surname' -> 'smith'
},
[1] -> {
    'firstname' -> 'fred',
    'surname' -> 'baker'
},
....

我已经尝试过:

    my $ref = $stmt_datahub->fetchall_arrayref;
    print(Dumper($ref));

但这并没有命名列。即它返回:

['mark', 'smith'], ['fred', 'baker']

等等

并且 fetchall_hashref 看起来您需要为其提供一个主键来索引哈希值,但我并不总是有,所以我宁愿它只输出一个数组。

这可能吗?!

最佳答案

您需要 fetchall_arrayref,但带有参数。这将返回 hashrefs 的 arrayref:

my $results_arrayref = $dbh->fetchall_arrayref( {} );

您还可以选择仅在哈希引用中包含某些列 - 有关更多详细信息,请参阅文档:

https://metacpan.org/module/DBI#fetchall_arrayref

为了清楚起见,您可能希望以更像 Perl 的方式编写该数据结构 - 在记录 Perl 列表/数组/arrayref 时,您不会包含数组索引(0、1 等)(PHP 混淆了这个问题)一些关联数组)

[ {
   firstname => 'mark',
   surname   => 'smith',
  },
  {
   firstname => 'fred',
   surname   => 'baker',
  },
  ...
],

关于perl - 以 HashMap 形式检索数据库行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17543756/

相关文章:

regex - 使用 Perl 正则表达式提取第 n 个出现

arrays - Perl, `map` 函数的未知结果

perl - 我可以从 Perl pdl2 shell 中检索命令的完整历史记录(如 bash 中的历史记录)吗?

perl DBI 和占位符

perl - Perl DBI 可以连接到 Redbrick 吗?

mysql - 数据库存在使用 perl

mysql - 带有插入和选择的 perl mySQL 过程在事务中失败

regex - perl 一行+正则表达式匹配部分单词

perl - DBI:在 eval 中引发错误

Perl Parallel::ForkManager 与 DBI 数据库处理程序