如何在带引号的占位符中使用查询?(perl/postgresql)

atl*_*lau 5 postgresql perl dbi

我正在尝试执行以下脚本:

#!/usr/bin/perl -w

use strict;
use DBI;

my $db = "Pg";
my $db_database = "whatever";
my $user = "whatever";
my $password = "whatever";

my $dbh = DBI->connect("dbi:$db:dbname=$db_database", $user, $password);

my $query = $dbh->prepare (q{SELECT
                   arrival_date - INTERVAL '? MINUTE'
                   FROM emails LIMIT 1})
  or die ("unable to prepare");
$query->execute(60) or die("unable to execute");

print $query->fetchrow_array, "\n";
Run Code Online (Sandbox Code Playgroud)

(arrival_date具有以下格式:带时区的时间戳NOT NULL默认值CURRENT_TIMESTAMP)

问题是没有检测到问号占位符,因为它的内部单引号:

DBD::Pg::st execute failed: called with 1 bind variables when 0 are needed 
Run Code Online (Sandbox Code Playgroud)

如果我使用qq {},$ 1占位符,并尝试使用$ dbh-> quote进行一些变化,则无效.我怎样才能做到这一点?

cjm*_*cjm 10

您不能在引号内使用占位符.您可以使用SQL字符串连接,但在这种情况下,使用乘法更容易:

my $query = $dbh->prepare (q{SELECT
                   arrival_date - ? * INTERVAL '1 MINUTE'
                   FROM emails LIMIT 1});
$query->execute(60);
Run Code Online (Sandbox Code Playgroud)

这样,您不必' minutes'在执行查询时附加到该数字.