Picking up the Pieces
So, what went wrong?
$@
- holds the text of the error message
if ($DBI::err && $@ =~ /^(\S+) (\S+) failed: /)
- then it was probably a DBI error
- and $1 is the driver class (e.g. DBD::foo::db), $2 is the name of the method (e.g. prepare)
$DBI::lasth
- holds last DBI handle used (not recommended for general use)
$h->{Statement}
- holds the statement text associated with the handle (even if its a database handle)
-
$h->{ShowErrorStatement} = 1
- appends $h->{Statement} to RaiseError/PrintError messages:
- DBD::foo::execute failed: duplicate key [for ``insert
]
- for statement handles it also includes the $h->{ParamValues} if available.
- Makes error messages much more useful. Better than using $DBI::lasth
- Many drivers should enable it by default. Inherited by child handles.