I do a lot of DBI programming on a daily basis and I still haven't come up with something I am 100% happy with. Most of the SQL statements I use are long multiline ones, which I like the form:
my $sth = $dbh->prepare(q{
SELECT x, y, z FROM table1, table2
WHERE x = ?, y = ?
ORDER BY z
});
I think making the SQL commands uppercase helps them stand out from the code a bit better. If it's a shorter statment I try to squeeze it on to one line. I also use prepared statements for most everything, apart from 1 shot updates, deletes etc.
$dbh->do('delete from temp where x = ?', undef, $x);
According to the DBI docs, using bind_columns is the way to go, it means you can write code like:
$sth->execute;
$sth->bind_column(\$res);
$sth->fetch;
$res would be undef if there was an error.
Another alternative is:
$sth->execute;
unless (@cols = $sth->fetchrow_array) {
# error
}
Hope this gives you a few ideas.