Greetings andrew,
Always use strict. Thereafter, I'd prepare the second query outside the while using a different name than your first. With DBI, you can have multiple queries running this way. Also, bind values (also known as placeholders) via DBI are your friend.
use strict;
my $sth_null = $dbh->prepare(q{
SELECT id, name FROM category WHERE parent IS NULL
});
$sth->execute or die $dbh->errstr;
my $sth_parent = $dbh->prepare(q{
SELECT id,name FROM category WHERE parent = ?
});
while ( my @slog = $sth_null->fetchrow_array ) {
$sth_parent->execute($slog[0]) or die $dbh->errstr;
my $rv = $sth_parent->rows;
my $subs = $rv;
...
Using placeholders with your prepare and execute statements lets DBI deal with making sure quotes are handled correctly. It also makes for nicer looking code, IMHO.
-gryphon
code('Perl') || die;
|