$dbh->prepare does not guarantee to return a valid statement handle.
It may return a false value. So check the returned value, and abort
if it is false, otherwise the error caused ->prepare to fail will get
overwritten by a less helpful one which says "Can't call method
'execute' on an undefined value" error.
…t ->prepare failure
This is reported in RT ticket #66815
Basically any call to ->begin_work, ->commit, >rollback made when
their internal call to ->prepare returns an invalid statement handle
will not notice and proceed to use it anyway.
In particular, this happens when a DBD::Mock::Session is in effect,
and the session state list has been exhausted. When this happens, the
method in question fails with an unhelpful error "Can't use an
undefined value as an ARRAY reference at ../lib/DBD/Mock.pm line
635", masking the real reason.
…for session exhaustion
Basically it succeeds despite there being no states left to verify,
and on return the ->execute method fails with an unhelpful error
"Can't use an undefined value # as an ARRAY reference at
../lib/DBD/Mock.pm line 635."
Fix DBD::Mock::Session->verify_bound_params to check for state exhaustion
A test showing DBD::Mock::Session->verify_bound_params doesn't check for session exhaustion
Add DBD::Mock::Session->current_state method