如何通过DBIx::Class将查询结果以数组引用形式返回?
如何用DBIx::Class获取有序的数组引用形式结果行?
你可以用更简洁且安全的方式实现,无需手动拼接SQL字符串,同时保证列的顺序:
方法一:直接利用as_query与DBI的selectall_arrayref
as_query返回的是包含SQL语句和绑定参数的数组引用,可直接传给selectall_arrayref,无需手动拆分:
my $rs = $db->resultset("SomeTable")->search({}); my $results = $dbh->selectall_arrayref($rs->as_query);
如果需要更明确地处理参数,也可以拆分后传入:
my $rs = $db->resultset("SomeTable")->search({}); my ($sql, @bind_params) = @{ $rs->as_query }; my $results = $dbh->selectall_arrayref($sql, undef, @bind_params);
方法二:使用DBIx::Class的cursor接口
完全通过DBIx::Class的原生接口实现,无需直接操作$dbh:
my $rs = $db->resultset("SomeTable")->search({}); my $cursor = $rs->cursor; my @results; while (my $row_arrayref = $cursor->next) { push @results, $row_arrayref; }
cursor->next返回的每一行都是有序的数组引用,列顺序与SQL查询的列顺序完全一致。
这两种方法都能保证列的顺序,同时避免了手动拼接SQL带来的安全风险,比你原来的实现更简洁规范。
内容的提问来源于stack exchange,提问作者simone
相关产品推荐
相关产品推荐

