in reply to DBI and fetchall_arrayref
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)"?
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: DBI and fetchall_arrayref
by runrig (Abbot) on Feb 19, 2009 at 18:05 UTC | |
by mje (Curate) on Feb 20, 2009 at 13:21 UTC | |
by hbm (Hermit) on Feb 20, 2009 at 13:37 UTC |