Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re: fetchrow_array

by bradcathey (Prior)
on May 27, 2005 at 11:22 UTC ( #461024=note: print w/ replies, xml ) Need Help??


in reply to fetchrow_array

Or to grab all the rows in column-value pairs into a hash ref (handy for HTML::Template),try:

$ary = $sth->fetchall_arrayref({}); for my $i ( 0 .. $#$ary ) { print $ary->[$i]{'status'}; }


—Brad
"The important work of moving the world forward does not wait to be done by perfect men." George Eliot


Comment on Re: fetchrow_array
Download Code
Re^2: fetchrow_array
by kutsu (Priest) on May 27, 2005 at 14:21 UTC

    Alternatively you can use bind_columns to do this (except row by row instead of all at once). From the docs (prepare something like "select region, sales from table"):

    $sth->execute; my %row; $sth->bind_columns( \( @row{ @{$sth->{NAME_lc} } } )); while ($sth->fetch) { print "$row{region}: $row{sales}\n"; }

    Updated: Added better reference to documentation

    "Cogito cogito ergo cogito sum - I think that I think, therefore I think that I am." Ambrose Bierce

      Thanks, but you lost me on:

      $sth->bind_columns( \( @row{ @{$sth->{NAME_lc} } } ));

      Can you unpack that for me? It thought binding is related to placeholders. What exactly is bind_columns doing and what is the gain? Appreciate it, TIA!


      —Brad
      "The important work of moving the world forward does not wait to be done by perfect men." George Eliot

        bind_columns is binding columns ;), seriously though: NAME_lc are the lower case column names from the database, region and sales in this case, and these are in an array ref which is used as the keys for %row (using a hash slice). The reason it uses bind_columns is that it processes the columns one by one (allowing you to have a normal hash not a hash of an array). So it's doing something like this:

        $sth->bind_columns( \( @row{ @{$sth->{NAME_lc} } } )); # NAME_lc = lower case column name # so it's equal to \@row{\@region} (and \@row{\@sales}) # binds \$row{region} much as it would \$region while($sth->fetch) { # sets $row{region} with region's data # does same with sales print "$row{region}, $row{sales}\n"; # since this is rebinded each time %row is overwritten }

        I hope this helps

        "Cogito cogito ergo cogito sum - I think that I think, therefore I think that I am." Ambrose Bierce

        Greetings all,
        Here is my crack at it.
        we know that
        $sth->{NAME_lc};
        returns the column names selected and lower-cased. with that we then utilized those names as a hash slice from the hash %row with the
        @row{ @{$sth->{NAME_lc}}};
        part. So up to this point we have a hash %row with keys equal to the lower-cased column names returned from the query. So next we reference the slice for the bind_columns call, which we accomplish by doing an \ on the entire list; the same as saying
        $sth->bind_columns(\($var1, $var2, $var3));
        which would create references for each var in the list.
        Nice way of doing it and probably one I will adopt in the future since I mostly use either fetchrow_hashref or just bind explicit vars.
        Does that make sense?

        -InjunJoel
        "I do not feel obliged to believe that the same God who endowed us with sense, reason and intellect has intended us to forego their use." -Galileo

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://461024]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (3)
As of 2014-09-24 02:40 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (244 votes), past polls