If you're going to go through the trouble of using bind variables, why not move the second prepare outside the while? That way you avoid needless re-prepareing of the same statement on every iteration of the loop...
my $sth_news = $dbh->prepare("
SELECT id, body
FROM news
");
$sth_news->execute;
$sth_news->bind_columns(\my $news_id,\my $news_body);
my $sth_comments = $dbh->prepare("
SELECT COUNT(id)
FROM comments
WHERE id = ?
");
while ($sth_news->fetch) {
$sth_comments->execute($news_id);
$sth_comments->bind_columns(\my $comments);
$sth_comments->fetch;
print "$news_id, $news_body, $comments";
}
--k.