Re: perl and postgresql - Mailing list pgsql-novice

From Ville Jungman
Subject Re: perl and postgresql
Date
Msg-id F25QG7UJ9Aus3Xzbofv0002ec16@hotmail.com
Whole thread Raw
In response to perl and postgresql  ("Sugrue, Sean" <sean.sugrue@analog.com>)
Responses Re: perl and postgresql
Re: perl and postgresql
List pgsql-novice
>The point is that he and you need to use placeholders to avoid sql
>injection. Just consider example below: what if variable prod is set to
>$prod = '10; DROP DATABASE x'

Doesn't work if $prod is checked elsewhere.

It's easier if you can call sql-commands just in the same way that you do
with sql-prompt. For example

@result=$self->kanta("select $a from table where name='$prod'");

is much simpler than same query with placeholders. That's why I like to do
it with sub like this.

>You should also look into DBI/DBD, as it seems to be the de facto way of
>doing database things in Perl today.

I'm familiar to that module. The use of these two modules are very similar
so it's easy to change my sub to use DBD if I need to do it someday. But,
good to know it's more standard way.

> > >From: douggorley@shaw.ca
> > >
> > >----- Original Message -----
> > >From: "Sugrue, Sean" <sean.sugrue@analog.com>
> > >
> > > >
> > > >
> > > > I am trying to execute the following query within perl
> > > >
> > > > #!/usr/local/bin/perl
> > > >
> > > > use DBI;
> > > >
> > > > $prod='stdf';
> > > >
> > > >
> > > > $dbh = DBI-
> > > >
> > >
> >connect("dbi:Pg:dbname=database;host=mink;port=0000","username","password");
> > > > $sth = $dbh->prepare("select *  from filestatus where fileformat =
> > > > $prod");if( defined($sth)){
> > > >
> > > > $sth->execute;
> > > > #for when model numbers are available
> > > > while (@devices = $sth->fetchrow){
> > > > ($product,$spec_key)=@devices;
> > > > print"product = $product and speckey = $spec_key \n"; }
> > > > }
> > > >
> > > > i***************************************
> > > > it works if you put a literal value of 'stdf' for $prod
> > > > but it fails when I try to use a variable.
> > > >
> > > > Another point is if it were an integer the variable would work.
> > > >
> > > > Question: How can I get this to work. I've used q// qw// qq// qx//
> > > >
> > > > Sean
> > > >
> > >
> > >Try using placeholders.
> > >
> > >$prod='stdf';
> > >$sth = $dbh->prepare("select *  from filestatus where fileformat = ?");
> > >$sth->execute( $prod );
> > >
> > >Doug Gorley | douggorley@shaw.ca
>
>--
>Antti Haapala


_________________________________________________________________
MSN 8 helps eliminate e-mail viruses. Get 2 months FREE*.
http://join.msn.com/?page=features/virus


pgsql-novice by date:

Previous
From: "Ville Jungman"
Date:
Subject: Re: perl and postgresql
Next
From: Keith Keller
Date:
Subject: Re: perl and postgresql