Try seeing the DBI trace method, and set the trace level high enough that you can see how your statement is parsed. Since PostgreSQL doesn't natively support placeholders, the DBD needs to parse the statement and replace placeholders with values. It may not be doing it correctly and might be a bug. Did you try putting your entire SQL statement on one line? Could be that the linebreaks are confusing the parsing of placeholders.
Also, what version of DBD::Pg are you using? Is it the latest? Several revisions have had fixes to placeholder parsing.
Update: I have DBD::Pg 1.21, and PostgreSQL installed at home, and I get no error with this code (and I've verified that the data gets inserted):
use warnings; use strict; use DBI; my $dbh = DBI->connect("dbi:Pg:dbname=pdqtest;host=localhost", "Owner", "", {RaiseError=>1}, ); dbh->do("create table mytmptbl (fld1 timestamp, fld2 integer)"); my $sql = qq{ INSERT INTO mytmptbl VALUES ( current_timestamp, ? ) }; my $var = 3; $dbh->do($sql, undef, $var); $dbh->disconnect;
In reply to Re: DBD::Pg placeholder problem
by runrig
in thread DBD::Pg placeholder problem
by McMahon
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |