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.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^3: DBI bind_param_inout trick
by mje (Curate) on Sep 05, 2012 at 09:22 UTC | |
by runrig (Abbot) on Sep 05, 2012 at 16:52 UTC | |
by mje (Curate) on Sep 06, 2012 at 08:03 UTC |
In Section
Meditations