Re: Bind Variables and Quoting / Dequoting Input

From: Michael Fuhr <mike(at)fuhr(dot)org>
To: operationsengineer1(at)yahoo(dot)com
Cc: "pgsql-novice(at)postgresql(dot)org" <pgsql-novice(at)postgresql(dot)org>
Subject: Re: Bind Variables and Quoting / Dequoting Input
Date: 2005-12-10 01:22:29
Message-ID: 20051210012229.GA13928@winnie.fuhr.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-novice

On Fri, Dec 09, 2005 at 01:54:13PM -0800, operationsengineer1(at)yahoo(dot)com wrote:
> do i need to quote input even though i'm using bind
> variables in my queries?
>
> i seem to think that quoting on entry and unquoting on
> return was a method for fighting sql injection, but
> i'm also thinking that bind variables may make that
> step meaningless.

Using placeholders should eliminate the need to quote, either by
quoting for you or by using the underlying protocol's mechanism for
parameterized queries. If you quote the data then you'll probably
see extra quotes in the inserted data, as in this example:

#!/usr/bin/perl
use strict;
use warnings;
use DBI;
my $data = "abc'def";
my $dbh = DBI->connect("dbi:Pg:dbname=test", "", "", {RaiseError => 1});
my $sth = $dbh->prepare("INSERT INTO foo VALUES (?)");
$sth->execute($data);
$sth->execute($dbh->quote($data));
$dbh->disconnect;

After running this script the table contains the following data:

test=> SELECT * FROM foo;
data
------------
abc'def
'abc''def'
(2 rows)

The first row is what we want; the second row is over-quoted. Check
your client interface's documentation or run tests to be sure it
works this way, but this example shows what's supposed to happen.

--
Michael Fuhr

In response to

Responses

Browse pgsql-novice by date

  From Date Subject
Next Message Michael Fuhr 2005-12-10 01:58:27 Re: Bind Variables and Quoting / Dequoting Input
Previous Message operationsengineer1 2005-12-09 21:54:13 Bind Variables and Quoting / Dequoting Input