【发布时间】:2014-01-05 22:23:50
【问题描述】:
我知道我可以通过插值来做到这一点。我可以使用占位符吗?
我收到此错误:
DBD::Pg::st execute failed: ERROR: invalid input syntax for integer: "{"22,23"}" at ./testPlaceHolders-SO.pl line 20.
对于这个脚本:
#!/usr/bin/perl -w
use strict;
use DBI;
# Connect to database.
my $dbh = DBI->connect("dbi:Pg:dbname=somedb;host=localhost;port=5432", "somedb", "somedb");
my $typeStr = "22,23";
my @sqlParms = [ $typeStr ];
my $sqlStr = << "__SQL_END";
SELECT id
FROM states
WHERE typeId in (?)
ORDER BY id;
__SQL_END
my $query = $dbh->prepare($sqlStr);
$query->execute(@sqlParms);
my $id;
$query->bind_columns(\$id);
# Process rows
while ($query->fetch())
{
print "Id: $id\n";
}
除了插值还有其他办法吗?
【问题讨论】:
-
为什么要使用数组引用执行查询?
[ $typeStr ]? -
是的,有办法绕过它。不要使用字符串,使用数字。如
my @nums = (22,23); my $placeholder = join ",", ("?") x @nums; $query->execute(@nums); -
您的解决方案有效。如果你要正式回答,我会接受的。
标签: perl postgresql dbi