placeholders - Mailing list pgsql-sql

From martin@axe.net.au
Subject placeholders
Date
Msg-id 199901060704.SAA16837@axe.net.au
Whole thread Raw
Responses Re: [SQL] placeholders  ("Gene Selkov Jr." <selkovjr@mcs.anl.gov>)
List pgsql-sql
Hi,

I am using
- Postrges 6.3.2
- DBI 0.93
- DBD-pg 0.73
- Slackware 3.3 Linux

I am accessing the database using a perl
CGI program.

I need to be able to list records from a
database in various sort orders. The user
needs to be able to select the sort order
using a web form.

The code I am using which works fine is

$sth1 = $dbh->prepare
   (q
    {
    SELECT DISTINCT
       catalogid,
       productid,
       reference,
       title,
       dateposted,
       dateremove,
       userlastupdate,
       email,
       webaddress,
       phone,
       details,
       category

    FROM product
    WHERE (( catalogid = 'mp')
    AND   ( category like :1 )
    AND   ( details like :2 )
    AND   ( userlastupdate like :3 ))
      ORDER BY title DESC
    }
    );


$counter = 0;
$sth1->execute (("$category\%"),("$keywords\%"), ("$postedby\%"))

or die "$DBI::errstr\n";

while ( (
       $catalogid,
       $productid,
       $reference,
       $title,
       $dateposted,
       $dateremove,
       $userlastupdate,
       $email,
       $webaddress,
       $phone,
       $details,
       $category
        ) = $sth1->fetchrow() )
    {
    $counter = $counter + 1;


After this the CGI writes out HTML
for each row read.

I want to be able to change the code so the
field name in the order by clause is variable

eg. instead of
      ORDER BY title DESC

I want to say
      ORDER BY :4 DESC

and in the execute statement
$sth1->execute (("$category\%"),("$keywords\%"), ("$postedby\%"))

add a fourth variable ("$orderby") which
will be set to title, dateposted or
userlastupdate

However if I use ("$orderby") as the
fourth variable and set $orderby to
title then my trace shows DBI puts
'title' into the SQL SELECT statement
not title and I get an invalid syntax
error. I need to find a way to stop
putting the ' ' around title.

Is there any way I can make the order by
operand a variable ??

Thanks,
Martin Stewart

pgsql-sql by date:

Previous
From: Jin Hui
Date:
Subject: Bit Operators
Next
From: Pawel Pierscionek
Date:
Subject: plpgsql problems