Do you have RaiseError set to 1 ? If not then the only place
where the program can die() is where you call execute()...
Anyway, I would try calling prepare() and
execute() using hardcoded values just to make sure you don't
have a fubar'ed version of DBI/DBD.
If you get a meaningful result, start adding your $p->{blah} variables
one-by-one and see when it breaks...
Hope this helps.