in reply to sql execute method

While waswas-fng's correct suggestion to wrap $sth->execute in an eval will work, a more proper method is to check the results of the $dbh->prepare statement, and probably also check to make sure that the $dbh itself is connected to a database.

You should modify your code to look something like this:
$sth = $dbh->prepare($sql); if (defined $sth and not defined $dbh->err) { my $rv = $sth->execute(); # check for errors in the execute using $rv->errstr, etc. } else { print STDERR "Unable to prepare: $dbh->errstr\n"; }
Additionally, in many cases, you probably don't even want to bother using prepare or execute, and should just go for the nice select* or do functions which take care of all of the nastiness for you.