我从数据库中获取数据...我想要实现的是为每个获取的数据行(id,title)创建一个哈希引用
{
id => data->[0],
title => data[1]
}
并将此哈希引用推送到数组引用中,以便创建以下格式
{ category => [
{
id => 1,
title => "title1"
},
{
id => 2,
title => "title2"
}
]
}
我所做的:
my $productCategories->{category} = [];
my $product = {};
my $sth = $dbh->prepare(qq[SELECT id,title FROM ].DB_SCHEMA().qq[.product_categories]) || die $dbh->errstr;
$sth->execute() || die $dbh->errstr;
while(my $data = $sth->fetch){
$product = {
id => $data->[0],
title => $data->[1]
};
push $productCategories->{category}, $product;
}
但它不起作用......
答案 0 :(得分:4)
DBI有许多获取数据的方法。其中一个被称为fetchall_arrayref()
,它将以完全符合您需要的结构的形式返回数据 - 无需自己构建数据。
my $sth = $dbh->prepare(qq[SELECT id,title FROM ] .
DB_SCHEMA() .
qq[.product_categories])
|| die $dbh->errstr;
$sth->execute() || die $dbh->errstr;
# Pass a hash ref to get each row back as a hash.
$productCategories->{category} = $sth->fetchall_arrayref({});
答案 1 :(得分:3)
启用use strict;
use warnings;
,它会告诉您原因。
推动参考是实验性的
不是ARRAY参考
尝试:
push @{$productCategories->{category}}, $product;
另外:小心宣告你push
在循环之外的事情 - 在这种情况下你应该没问题,但要记住你正在推动参考。如果您重复使用变量,那么可以最终推送相同的参考。