The reason is because you already are using single quotes around the $text,
when you bind it also puts quotes around it, since internally quote() is
called.


Ilya Sterin

-----Original Message-----
From: Robert Sherman [mailto:[EMAIL PROTECTED]]
Sent: Saturday, May 19, 2001 1:22 PM
To: [EMAIL PROTECTED]
Subject: problem with bind statements (DBD::Pg)


the facts:

solaris 8 x86
perl 5005_03
DBI 1.15
DBD::Pg 0.98
PostgreSQL 7.1.1

the problem:

doing a simple SELECT query aginst a single table. If
i use interpolated SQL, it works just fine, but if i
use a bind statement, i get no results from my query.
the code i am testing with is below (the bind stuff is
commented out). Any ideas as to why the binds don't
work?

TIA

rob


the code:

====================================================

#!/usr/bin/perl

use strict;

use CGI;

use DBI;

use DBD::Pg;

my $q = new CGI;

my $field = $q->param("field");

my $text = "\'\%" . $q->param("text") . "\%\'";

my $dbname = 'foobardb';



####this is the interpolated statement, which
works####

my $sql = "SELECT * FROM widgets WHERE $field LIKE
$text";



my $dbh = DBI->connect("dbi:Pg:dbname=$dbname");



####this is the one that does work####

my $sth = $dbh->prepare( "$sql");



####this uses binds, and does not work####

#my $sth = $dbh->prepare( "SELECT * FROM demographics
WHERE ? LIKE ?");

#$sth->bind_param(1, $field);

#$sth->bind_param(2, $text);



$sth->execute();

print $q->header("text/html"),
        $q->start_html(-title=>"RESULTS",
-bgcolor=>"#8c6b6b"),
        $q->p("Here are the results of your query:"),
        $q->p("value of field: $field"),
        $q->p("value of text: $text"),
        $q->hr;

while ( my @row = $sth->fetchrow_array ) {

        print $q->p("first element is: $row[0]");

        print $q->hr;

        }

$q->end_html;

=================================================


__________________________________________________
Do You Yahoo!?
Yahoo! Auctions - buy the things you want at great prices
http://auctions.yahoo.com/

Reply via email to