On Thu, Sep 29, 2005 at 10:49:48AM -0700, Jeff Zucker wrote: > Sorry, not enough coffee this morning, I forgot to use the DBD's quote, > dub^9.
So you're just making this up as you go along? ;-) > package MyDbi; > use base 'DBI'; > > package MyDbi::db; > use base 'DBI::db'; > > sub prepare { > my($self,@connect_args) = @_; > return bless $self->SUPER::prepare(@connect_args), 'MyDbi::st'; > } That prepare (and especially the bless) shouldn't be needed. (That's one of the ways DBI make subclassing easier.) > package MyDbi::st; > use base 'DBI::st'; > > sub execute { > my($sth,@binds)[EMAIL PROTECTED]; > my $rv; > eval { $rv = $sth->SUPER::execute(@binds) }; > return $rv unless $@; > my $stmt = $sth->{Statement}; > my $class = 'DBD::' . $sth->{Database}->{Driver}->{Name} . '::db'; > for my $b(@binds) { > $b = $class->quote($b) if defined $b and !DBI::looks_like_number($b); > $b = q{NULL} unless defined $b; > $stmt =~ s/\?/$b/; > } > die sprintf "Execution Error: %sReconstructed SQL = %s\n" > , $sth->errstr, $stmt; > } I'd rework it this way (untested): sub execute { my($sth,@binds)[EMAIL PROTECTED]; my $rv = eval { $sth->SUPER::execute(@binds) }; return $rv unless $@; my $stmt = $sth->{Statement}; for my $b (@binds) { $b = $sth->{Database}->quote($b) unless DBI::looks_like_number($b); $stmt =~ s/\?/$b/; } return $sth->set_err($sth->err, sprintf "Execution Error: %s (Reconstructed SQL = %s)\n" , $sth->errstr, $stmt)); } Tim.