为什么我得到错误"当需要0时调用1个绑定变量"当我尝试用DBI执行查询时?

时间:2016-10-18 13:13:07

标签: postgresql perl

我尝试使用以下代码从表中选择一些行(PostgreSQL):

my $kadadbh = DBI->connect(
    "dbi:Pg:dbname=$dbname;host=$host",
    $dbuser,
    $dbpasswd
);

my $subject_nar_sel= $kadadbh->prepare(
    'SELECT * FROM subject WHERE SUBSTRING(CAST(id AS text),1,6) = "?";'
);

$nar=605812;
$subject_nar_sel->execute($nar);

但是我收到了一个错误:

  

在需要0时使用1个绑定变量调用

当我交换单引号和双引号时,我得到同样的错误:

"SELECT * FROM subject WHERE SUBSTRING(CAST(id AS text),1,6) = '?';"

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:6)

您当前的查询正在测试SUBSTRING(CAST(id AS text),1,6)是否匹配文字字符串可疑命名的引用标识符"?"。因此,即使bind参数具有字符串类型:

,也不要引用?
SELECT * FROM subject WHERE SUBSTRING(CAST(id AS text),1,6) = ?