http:[EMAIL PROTECTED]/msg00111.html
http:[EMAIL PROTECTED]/msg12852.html

Tim.

On Sun, Sep 29, 2002 at 03:16:23PM -0700, [EMAIL PROTECTED] wrote:
> Hello,
> 
> In an attempt to add some custom logging into DBI calls, I have over-ridden
> the execute method of DBI with a custom execute method.  The project I have
> includes writing out the SQL statement that is at fault if execute blows
> up.  This needs to be transparent to the user, and must work with all
> existing DBI code that has been writen.
> 
> My approach is simple.  Override execute, add some error logging if $@
> returns back anything from an eval calling the real DBI execute.  One piece
> is missing though.
> 
> While printing out the statement from $pkg->{'STATEMENT'}, the placeholders
> used (?) ends up coming in literally.  This is fine and I wouldn't mind
> substituting the values passed for the bindings, but I cannot get to the
> values.  Let me clear that up..
> 
> If the user calls execute, binding the params within the execute, I can get
> them.  They are passed to my execute statement and I can grab them from @_,
> but if the params are passed using bind_param, I cannot get them, save for
> overriding the bind_param statement as well (somthing I would rather not
> do).
> 
> To make a long story short, I would like to know if there is any way to
> access the values passed in a bind_param method call.
> 
> Here is the over-ridden execute method, this works except for the parameter
> part.
> 
> Thanks in advance.
> 
> -Mark
> 
> sub execute {
>   my $pkg = shift;
>   my $statement = $pkg->{'Statement'};
> 
>   # if RaiseError or PrintError are set to 1 (lets hope), lets make sure
>   # we don't print the DBI error until we are ready to do so.
>   {
>     open TRAP, ">/dev/null";
>     local *STDERR = *TRAP;
>     eval { $pkg->SUPER::execute(@_); };
>     close TRAP;
>   }
> 
>   my @params = @_;
>   my $params = (@params) ? \@params : (
>                my $tmp_p = $pkg->FETCH('driver_params') ? $tmp_p : [] ) ;
> 
>   my $num_of_parms = $pkg->{'NUM_OF_PARAMS'};
> 
>   print "Number of Parameters: $num_of_parms\n";
>   print "Parms = @$params\n";
>   print "Executing Statement -> \n";
>   print "\n".&$pretty_print($statement)."\n";
> 
>   if ($@) {
>     warn "Could not execute statment -> \n";
>     warn "\n".&$pretty_print($statement)."\n";
>     die "$@\n";       # Yes this is intentional, die no matter what.
>   }
> }
> 
> 
> 

Reply via email to