我知道我可以通过插值来做到这一点。我可以使用占位符吗?
我收到这个错误:
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";
}
除了插值还有其他办法吗?
最佳答案
DBD::PG
支持 PostgreSQL arrays , 所以你可以像这样简单地写一个查询:
WHERE typeid = ANY( ARRAY[1,2,3] )
或者,使用参数...
WHERE typeid = ANY(?)
然后就用数组支持
my @targets = (1,2,3);
# ...
$query->execute(\@targets);
关于perl - 如何在 "in (...)"子句中使用占位符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20646318/