如何使用Perl::DBI返回列名的关联数组和仅定义的值?
我使用了:如何使用Perl::DBI返回列名的关联数组和仅定义的值?,perl,dbi,Perl,Dbi,我使用了: my @ar = $stm->fetchrow_array #to remove undefined @ar = grep defined, @ar; 但这不会将列名显示为引用 所以我用 my $rec = $stm->fetchrow_arrayref 但是很难删除未定义的值,而且数组引用不是列名。关于*\u hashref方法的强制性警告:如果查询返回多个同名列,则只有一个列将添加到哈希中。此外,数据库服务器还确定诸如COUNT(*)等字段的名称,这可能会导致与其
my @ar = $stm->fetchrow_array
#to remove undefined
@ar = grep defined, @ar;
但这不会将列名显示为引用
所以我用
my $rec = $stm->fetchrow_arrayref
但是很难删除未定义的值,而且数组引用不是列名。关于
*\u hashref
方法的强制性警告:如果查询返回多个同名列,则只有一个列将添加到哈希中。此外,数据库服务器还确定诸如COUNT(*)
等字段的名称,这可能会导致与其他列发生冲突。您可以在SQL语句中使用列别名来避免这种情况,例如,SELECT COUNT(*)AS foo
而不仅仅是SELECT COUNT(*)
有人轻描淡写地说,在查询中有多个名称相同的列是一种不好的做法。@mpapec,不,不是,因为这些列可能位于不同的表中。@ikegami,我认为这是一个纯粹从SQL查询的角度来看的错误做法(有列别名来解决这个问题)。
my $rec = $stm->fetchrow_hashref;
my @to_delete = grep { !defined($rec->{$_}) } keys %$rec;
delete @{$rec}{@to_delete};