Thread: escaping arrays in perl dbi

escaping arrays in perl dbi

From
Vincent Stoessel
Date:
Hello All,
I am trying to figure out how I need to change the string below in
order to do an insert into my table using perl dbi. perl seems to choke
on the curly brackets. Any help would be appriciated.
Thanks.


$dbh->do("update basket set f_order ='{"apple",0}' where cap ='I'");


-- 
Vincent Stoessel
Linux Systems Developer
vincent xaymaca.com



Re: escaping arrays in perl dbi

From
Tod McQuillin
Date:
On Thu, 9 May 2002, Vincent Stoessel wrote:

> I am trying to figure out how I need to change the string below in
> order to do an insert into my table using perl dbi. perl seems to choke
> on the curly brackets. Any help would be appriciated.
>
> $dbh->do("update basket set f_order ='{"apple",0}' where cap ='I'");

You are using double quotes as your string delimiter, and also double
quotes inside it.

Probably this would work:

$dbh->do("update basket set f_order ='{\"apple\",0}' where cap ='I'");

or this:

$dbh->do(qq/update basket set f_order ='{"apple",0}' where cap ='I'/);

But try using DBI parameters like this:

$dbh->prepare("update basket set f_order = ? where cap = ?");
$dbh->execute('{"apple",0}', 'I');

DBI should take care of all the quoting and escaping for you.
-- 
Tod McQuillin




Re: escaping arrays in perl dbi

From
Vincent Stoessel
Date:
Thank you everyone for all of the great answers.

Dave Carrigan wrote:
> Tod McQuillin <devin@spamcop.net> writes:
> 
> 
>>But try using DBI parameters like this:
>>
>>$dbh->prepare("update basket set f_order = ? where cap = ?");
>>$dbh->execute('{"apple",0}', 'I');
>>
>>DBI should take care of all the quoting and escaping for you.
> 
> 
> This is the best way to do it, but you can shorten it with:
> 
>  $dbh->do("update basket set f_order = ? where cap = ?", 
>           undef, '{"apple",0}', 'I');
> 
> If you don't want to use the parameterized mechanism, Perl's qq operator
> is your friend:
> 
>  $dbh->do(qq(update basket set f_order = {"apple",0} where cap = 'I'));
> 



-- 
Vincent Stoessel
Linux Systems Developer
vincent xaymaca.com



Re: escaping arrays in perl dbi

From
Ian Barwick
Date:
On Thursday 09 May 2002 16:12, Vincent Stoessel wrote:
> Hello All,
> I am trying to figure out how I need to change the string below in
> order to do an insert into my table using perl dbi. perl seems to choke
> on the curly brackets.

It's choking on the unescape quotes...

> $dbh->do("update basket set f_order ='{"apple",0}' where cap ='I'");

qq is your friend:

$dbh->do(qq|update basket set f_order ='{"apple",0}' where cap ='I'|);

Type

perldoc perlop

into a nearby commandline and look for the section "Quote and Quote-like
Operators" for more info.


Ian Barwick


Re: escaping arrays in perl dbi

From
Andrew Perrin
Date:
It's not the curly brackets but the double quotes - when you hit the
opening " of "apple" it matches the original " of the string. Try:

$dbh->do(q{update basket set f_order='{"apple",0}' where cap='I'});

ap

----------------------------------------------------------------------
Andrew J Perrin - andrew_perrin@unc.edu - http://www.unc.edu/~aperrinAssistant Professor of Sociology, U of North
Carolina,Chapel Hill     269 Hamilton Hall, CB#3210, Chapel Hill, NC 27599-3210 USA
 


On Thu, 9 May 2002, Vincent Stoessel wrote:

> Hello All,
> I am trying to figure out how I need to change the string below in
> order to do an insert into my table using perl dbi. perl seems to choke
> on the curly brackets. Any help would be appriciated.
> Thanks.
> 
> 
> $dbh->do("update basket set f_order ='{"apple",0}' where cap ='I'");
> 
> 
> -- 
> Vincent Stoessel
> Linux Systems Developer
> vincent xaymaca.com
> 
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster
> 



Re: escaping arrays in perl dbi

From
Dave Carrigan
Date:
Tod McQuillin <devin@spamcop.net> writes:

> But try using DBI parameters like this:
> 
> $dbh->prepare("update basket set f_order = ? where cap = ?");
> $dbh->execute('{"apple",0}', 'I');
> 
> DBI should take care of all the quoting and escaping for you.

This is the best way to do it, but you can shorten it with:
$dbh->do("update basket set f_order = ? where cap = ?",          undef, '{"apple",0}', 'I');

If you don't want to use the parameterized mechanism, Perl's qq operator
is your friend:
$dbh->do(qq(update basket set f_order = {"apple",0} where cap = 'I'));

-- 
Dave Carrigan (dave@rudedog.org)            | Yow! Why am I in this ROOM in
UNIX-Apache-Perl-Linux-Firewalls-LDAP-C-DNS | DOWNTOWN PHILADELPHIA?
Seattle, WA, USA                            | 
http://www.rudedog.org/                     |