Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change

Re^2: DBI bind_param_inout trick

by mje (Deacon)
on Sep 03, 2012 at 16:58 UTC ( #991478=note: print w/ replies, xml ) Need Help??

in reply to Re: DBI bind_param_inout trick
in thread DBI bind_param_inout trick

Looks like a bug in DBD::ODBC. Parameters are bound initially in ODBC at bind time and if they change at execute time they have to be rebound ODBC-wise. The following code is what tests whether a parameter needs to be rebound:

if (SvTYPE(phs->sv) != phs->sv_type /* has the type changed? */ || (SvOK(phs->sv) && !SvPOK(phs->sv)) /* is there still a string? * +/ || SvPVX(phs->sv) != phs->sv_buf /* has the string buffer moved? */ ) { if (!rebind_param(sth, imp_sth, imp_dbh, phs)) croak("Can't rebind placeholder %s", phs->name); }

Trouble is I didn't write that code which attempts to rebind the parameter ODBC-wise and although I understand the first and last test in the if condition the comment next to "(SvOK(phs->sv) && !SvPOK(phs->sv))" does not seem to agree with the code. I wonder what the original author meant. It also does not cater for a parameter being undef then a string.

Comment on Re^2: DBI bind_param_inout trick
Download Code
Re^3: DBI bind_param_inout trick
by mje (Deacon) on Sep 05, 2012 at 09:22 UTC
      Awesome! I expected this to not be supported in some DBDs, but if it fleshes out bugs where it is supposed to be supported, then it's done more than originally intended!

        Thanks for the example runrig. The problem was fairly specific in that it only went wrong it you called bind_param_inout with undef values initially then changed them to strings shorter than 28 characters. However, it was certainly a bug and I was a little surprised no one has hit it before.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://991478]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (4)
As of 2014-07-26 01:30 GMT
Find Nodes?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:

    Results (175 votes), past polls