Or a slightly different syntax:
my ($field1, $field2, $field3) = (undef, undef, undef);
my $sth = $dbh->prepare('select * from table');
$sth->execute;
if ($sth->rows > 0) {
$sth->bind_columns(\($field1, $field2, $field3));
$sth->fetch;
}
$sth->finish;
for ($field1, $field2, $field3) { $_ ||= '' }
When dealing with failures caused by duplicate values (due to a constraint) I just check like this:
$dbh->do('insert into blah (?, ?, ?)', undef, $x, $y, $z);
if ($dbh->err) {
if ($dbh->err == 1062) {
# duplicate
} else {
# some other problem
}
}
1062 happens to be the error code for MySQL.
Look at $DBI::lasth->{Statement} which has the last SQL statement you tried to execute which is quite handy in a debug subroutine.