What I do in my scripts is setting the RaiseError option to 1, and let it take care of all errors.
in reply to DBI confusion
Then you can do something along these lines:
my $sth = $dbh->prepare("SELECT password FROM table WHERE userName = ?
print "logged in\n";
Please don't ever interpolate data into your SQL queries, use placeholders like I did in the example above. If you interpolate data, you're not safe against SQL injection - what if the user name actually is evil ' or '' = '?