I'm not entirely sure you are right when you suggest there is a separate err/errstr for each handle. I believe there is only one despite it looking like there is one per handle via the pod.
perl -le 'use strict; use warnings; use DBI; my $h = DBI->connect("dbi
+:mysql:database=test", "xxx","yyy", {RaiseError => 0, PrintError => 0
+}) or die $DBI::errstr; my $s = $h->prepare(q/select * from does_not_
+exist/) or die "prepare: " . $DBI::errstr; $s->execute or print "\nex
+ecute DBI:" . $DBI::errstr . " sth:", $s->errstr . " dbh:", $h->errst
+r; $h->do(q/rubbish/) or print $s->errstr, "\n";
execute DBI:Table 'test.does_not_exist' doesn't exist sth:Table 'test.
+does_not_exist' doesn't exist dbh:Table 'test.does_not_exist' doesn't
+ exist
You have an error in your SQL syntax; check the manual that correspond
+s to your MySQL server version for the right syntax to use near 'rubb
+ish' at line 1
Notice you get the same error from DBI, dbh and sth. Also, if you error on a dbh you can access the same error from the sth. I have this recollection from a dbi-dev posting from way back I could probably dig out. |