Re: [pgsql-de-allgemein] Funktionsargument für eine "field IN ($1)" Bedingung

From: Nicolas Barbier <nicolas(dot)barbier(at)gmail(dot)com>
To: Andreas Tille <andreas(at)an3as(dot)eu>
Cc: PostgreSQL <pgsql-de-allgemein(at)postgresql(dot)org>
Subject: Re: [pgsql-de-allgemein] Funktionsargument für eine "field IN ($1)" Bedingung
Date: 2010-12-16 11:17:00
Message-ID: AANLkTikJz2GW3um-HZpSBbxWu_AhvSwjhyHb-z1-Efx6@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

Am 16. Dezember 2010 11:54 schrieb Andreas Tille <andreas(at)an3as(dot)eu>:

>        query = 'SELECT * FROM mytable WHERE field IN ( || $1 || ) ;';

[..]

> FEHLER:  es gibt keinen Parameter $1
> ZEILE 1: SELECT * FROM mytable WHERE field IN ( || $1 || ) ;
>                                                   ^
> ANFRAGE:  SELECT * FROM mytable WHERE field IN ( || $1 || ) ;
> KONTEXT:  PL/pgSQL function "test_set_of_arguments" line 7 at FOR-über-EXECUTE-Anweisung

Das »$1« soll von PL/PgSQL interpretiert werden (also nicht Teil des
SQL Statements werden), es soll also nicht im String eingebettet
werden:

query = 'SELECT * FROM mytable WHERE field IN (' || $1 || ') ;';

(Achte auf die zusätzlichen Anführungszeichen.)

Das Ganze is natürlich ein bisschen gefährlich bezüglich SQL-Injection
(falls der String vom Benutzer beeinflusst werden kann), und aufgrund
des EXECUTE Statements auch nicht sonderlich performant (das SQL
Statement muss jedes mal erneut gebildet, geparset und geplant
werden).

Nicolas

In response to

Responses

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message Andreas Tille 2010-12-16 12:21:55 Re: Funktionsargument für eine "field IN ($1)" Bedingung
Previous Message Andreas Tille 2010-12-16 10:54:00 Funktionsargument für eine "field IN ($1)" Bedingung