in reply to Re^2: fetchrow_array
in thread fetchrow_array

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!

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

Replies are listed 'Best First'.
Re^4: fetchrow_array
by kutsu (Priest) on May 27, 2005 at 16:36 UTC

    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

Re^4: fetchrow_array
by injunjoel (Priest) on May 27, 2005 at 18:26 UTC
    Greetings all,
    Here is my crack at it.
    we know that
    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?

    "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