加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:32:56 所属栏目:大数据 来源:网络整理
导读:我正在尝试执行以下脚本: #!/usr/bin/perl -wuse 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-
我正在尝试执行以下脚本:
#!/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";

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

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

DBD::Pg::st execute failed: called with 1 bind variables when 0 are needed

如果我使用qq {},$1占位符,并使用$dbh-> quote尝试了一些变体,它无济于事.我怎样才能做到这一点?

解决方法

您不能在引号内使用占位符.您可以使用SQL字符串连接,但在这种情况下,使用乘法更容易:
my $query = $dbh->prepare (q{SELECT
                   arrival_date - ? * INTERVAL '1 MINUTE'
                   FROM emails LIMIT 1});
$query->execute(60);

这样,在执行查询时,您不必在数字上附加“分钟”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读