Sometimes you just can't see the wood for the trees :-) More sleep needed! Thanks all,
Marty --- "Sterin, Ilya (I.)" <[EMAIL PROTECTED]> wrote: > Or better yet > > $sth->bind_param($_, $execute_args[$_]) for > (0..$#execute_args); > > Arrays start from zero. > > Ilya > > -----Original Message----- > From: Tim Bunce [mailto:[EMAIL PROTECTED] > Sent: Tuesday, September 14, 2004 11:56 AM > To: Martin Moss > Cc: Tim Bunce; Jenda Krynicky; [EMAIL PROTECTED] > Subject: Re: bind_param_inout > > > On Tue, Sep 14, 2004 at 02:33:41PM +0100, Martin > Moss wrote: > > I've got one further issue thats driving me nuts. > > > > Here is the code I'm running, > > > > $sth->bind_param($_, $execute_args[$_]) for > ([EMAIL PROTECTED]); > > Actually that needs to be $execute_args[$_-1] > > That may fix your other problem. If not please post > a small > self-contained example. > > Tim. > > > $sth->bind_param_inout(scalar > @execute_args+1,\$new_id,38); > > > N.b. using scalar @execute_args produces rebind > > errors, unless I do the +1." Can you explain why I > > shouldn't use the +1?? > > > > Here is the SQL I'm generating:- > > > > INSERT INTO table (CompID, User_ID, Referral, > Newregistration, > > Phonecontact, Created, Updated) VALUES > (COMPID_seq.nextval, ?, ?, ?, > > ?, from_unixdate_func(1095168082), > > from_unixdate_func(1095168082)) returning CompID > into > > ? > > > > And here is a dump of the @execute_args array > > > > $VAR1 = 3738; > > $VAR2 = 'Y'; > > $VAR3 = 'Y'; > > $VAR4 = 'Y'; > > > > When I run this query I get the following error:- > > > > DBD::Oracle::st execute failed: ORA-01722: invalid > > number (DBD ERROR: OCIStmtExecute) at > > > /opt/apps/embperl2-apache-matt/perl/perl-5.6.1/lib/site_perl/5.6.1/III > > /Oracle/Object.pm > > line 974. > > > > If I run the insert without the column which > contains > > a number (e.g. run the query without the User_ID > > value, so that ALL the variables passed to the > binds > > are of type varchar (perl string) it works. And if > I > > run the query for only Numbers it works, but as > soon > > as I try to have strings and numbers inside my > > @execute_args array my code breaks. We're running > > Oracle 8i. > > > > If I expressly say to_num(?) for the num column > Then > > the query works when the rest of the columns are > > strings. > > > > This whole issue seems to be 'quirky' and it's > > probably my lack of Oracle thats causing me to do > > somethign stupid, but I can't tell what. > > > > Any help would be so much appreciated! > > > > Marty > > > > > > --- Martin Moss <[EMAIL PROTECTED]> > wrote: > > > Thanks for you help, > > > > > > Marty > > > > > > > > > --- Tim Bunce <[EMAIL PROTECTED]> wrote: > > > > On Tue, Sep 14, 2004 at 12:34:09AM +0200, > Jenda > > > > Krynicky wrote: > > > > > From: Tim Bunce <[EMAIL PROTECTED]> > > > > > > > > > > > > Use bind_param() or bind_param_inout() for > all > > > > the params > > > > > > and then call execute() with no arguments. > > > > > > > > > > > > Tim. > > > > > > > > > > I wonder ... how about adding a method > > > > bind_params() like this: > > > > > > > > > > sub bind_params { > > > > > my $sth = shift; > > > > > my $pos = (ref($_[0]) ? 1 : shift); > > > > > for my $param (@{$_[0]}) { > > > > > $sth->bind_param($pos++, $param); > > > > > } > > > > > } > > > > > > > > No need. See below. > > > > > > > > > So that this could be shortened to > > > > > > > > > > $sth->bind_params([EMAIL PROTECTED]); # > default > > > > position is 1 > > > > > > > > > > > > > > > $sth->bind_param_inout($#execute_args+1,\$new_id,38); > > > > > > > > Without adding any new methods it can be > shortened > > > > to > > > > > > > > $sth->bind_param($_, $execute_args[$_]) for > ([EMAIL PROTECTED]); > > > > $sth->bind_param_inout($#execute_args+1, > > > \$new_id, > > > > 38); > > > > > > > > I'll add that to the docs. > > > > > > > > Tim. > > > > > > > > p.s. I'd use "scalar @execute_args" or > > > > "[EMAIL PROTECTED]" instead of > "$#execute_args+1". > > > > > > > > > > > > > > > > > > > > > > > > > ___________________________________________________________ALL-NEW > > > Yahoo! Messenger - all new features - even more > fun! > > > http://uk.messenger.yahoo.com > > > > > > > > > > > > > > > > ___________________________________________________________ALL-NEW > > > Yahoo! Messenger - all new features - even more > fun! > > http://uk.messenger.yahoo.com > > > ___________________________________________________________ALL-NEW Yahoo! Messenger - all new features - even more fun! http://uk.messenger.yahoo.com
