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

前端之家收集整理的这篇文章主要介绍了如何在带引号的占位符中使用查询? (perl / postgresql)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试执行以下脚本:
  1. #!/usr/bin/perl -w
  2.  
  3. use strict;
  4. use DBI;
  5.  
  6. my $db = "Pg";
  7. my $db_database = "whatever";
  8. my $user = "whatever";
  9. my $password = "whatever";
  10.  
  11. my $dbh = DBI->connect("dbi:$db:dbname=$db_database",$user,$password);
  12.  
  13. my $query = $dbh->prepare (q{SELECT
  14. arrival_date - INTERVAL '? MINUTE'
  15. FROM emails LIMIT 1})
  16. or die ("unable to prepare");
  17. $query->execute(60) or die("unable to execute");
  18.  
  19. print $query->fetchrow_array,"\n";

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

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

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

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

解决方法

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

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

猜你在找的Perl相关文章