in reply to Re^3: DBI hashref does not return data in order of query
in thread DBI hashref does not return data in order of query

The problem is since they can choose their own data, it's entire possible to not have any unique columns on their own. Trying your example I <anon> element tags again. I am using XML::Simple to create the xml.
my @xml_array = (); while ( my $row = $sth->fetchrow_arrayref ) { push @xml_array, $row; } my $cgi = CGI->new; print $cgi->header('text/xml'); print Dumper( \@xml_array ); my $testxml = XMLout( \@xml_array, NoAttr => 1, RootName => 'datas +et', ); print $testxml;
In another section, I use XML::Generator, like this. Maybe somehow I can loop through so the right amount of columns are created in this hash, and it's generated on it's own. UNLESS it's possible to get the column names in the element tags using the above array solution, I just can't see it. :(
$xml->cdr( $xml->Date($date_time), $xml->IngressTG($orig_gw), $xml->EgressTG($term_gw), $xml->Dialed($call_dtmf), $xml->DUR($duration), $xml->PDD($hold_time), $xml->ISDN($isdn), $xml->CallType($call_type), $xml->Link("URL") );

Replies are listed 'Best First'.
Re^5: DBI hashref does not return data in order of query
by tuxz0r (Pilgrim) on Oct 23, 2007 at 14:20 UTC
    I think one of the other posters mentioned a way to get the column names (outside of using the fetchrow_hashref) but, if the query is static you can just create an array of column names and create your own hash, since the fetchrow_arrayref returns data in the order of the SQL select column order. Maybe,
    my @cols = ('field1','field2','field3'); while ( my $row = $sth->fetchrow_arrayref ) { # create a hash ref to assign values to cols my $tmp = {}; @$tmp{@cols} = @$row; push @xml_array, $tmp; } # Access fields like so... print $xml_array[0]->{field1},"\n";
    I've used this quite a bit in code where I'm reading in files which don't have the column names in them as a header. This should get you a hash per record which sounds like what you want.
      It was a misunderstanding on my part. Here is my whole function, and I get an error about coercing an array into a hash.
      my @names = @{ $sth->{NAME} }; my @ordered_values = (); my %xml_hash = ( dataset => [] ); while ( my $row = $sth->fetchrow_arrayref ) { @ordered_values = @{$row}{@names}; <----Can't coerce array in +to hash HERE } my $cgi = CGI->new; print $cgi->header('text/xml'); my $testxml = XMLout( \@ordered_values, NoAttr => 1, RootName => ' +dataset', ); print $testxml;