Howdy bros. I have written the following sub to take an object and insert its contents into MySQL via DBI using placeholders:
sub insertsql {
my ($dbh,$table,$data) = @_;
my @qm;
my @keys;
my @values;
my $i = -1;
foreach my $k (keys %$data) {
$i++;
$keys[$i] = $k;
$values[$i] = $data->{$k};
$qm[$i] = '?';
}
my $keylist = join(",",@keys);
my $qlist = join(",",@qm);
my $sqlstatement = "insert into $table ($keylist) values ($qlist)"
+;
my $sth = $dbh->prepare($sqlstatement);
$sth->execute(@values) || die "Could not execute MySQL statement:
+$sqlstatement";
$sth->finish();
return $dbh->{'mysql_insertid'};
}
This has worked fine for me for some time, but lately I have encountered situations where when I execute the sub, the whole Perl script containing it goes directly to exit, no error message, nothing--just ends. I have determined in one case this happened when one of the values that was supposed to be in @values was null.
But my question is, why does it just stop rather than DIEing on the $sth->execute method and giving me the specified error message? That would make it a whole lot easier to find and correct the offending input. Have I not set it up right somehow?
TIA...Steve