From what I've read and from my recent experience with DBI, you'll have an easier time if you bind your columns. You can do something like this:
my $b; my $sql = qq{SELECT b FROM blah WHERE user = ?}; my $sth = $dbh->prepare("$sql"); $sth -> execute("bahbah"); $sth -> bind_col(1,\$b); while( $sth->fetchall_arrayref ) { print "$b\n" if $_; }
Update: Indeed, runrig, that was bad. I munged the following two methods (perhaps neither of which fully applies since the OP is fetching hashrefs.)
my $b; my $sql = qq{SELECT b FROM blah WHERE user = ?}; my $sth = $dbh->prepare("$sql"); $sth -> execute('bahbah'); $sth -> bind_col(1,\$b); while( $sth->fetch ) { print "$b\n"; } ################ # OR: ################ my $sql = qq{SELECT b FROM blah WHERE user = ?}; my $sth = $dbh->prepare("$sql"); $sth -> execute('bahbah'); my $rows = []; # cache for batches of rows while(my $row = shift(@$rows) || shift(@{$rows=$sth->fetchall_arrayref([0],10_000)|| +[]})) { print "$row->[0]\n"; }
Incidentally, while both produce the same lists, do you know why the latter also gives "ERROR no statement executing (perhaps you need to call execute first)"?
In reply to Re: DBI and fetchall_arrayref
by hbm
in thread DBI and fetchall_arrayref
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |