perl - 如何在 "in (...)"子句中使用占位符?

标签 perl postgresql dbi

我知道我可以通过插值来做到这一点。我可以使用占位符吗?

我收到这个错误:

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/

相关文章:

postgresql - Postgres - 从记录变量动态引用列

mysql - PostgreSQL 和 MySQL 权限管理等 CouchDB 数据库是否有访问控制?

postgresql - 如何将 View 作为计算列实现/使用到表中

regex - 排除以特定文件扩展名结尾的文件

perl - 如何将公共(public)路径转发到另一个 Catalyst Controller ?

bash - perl shasum 与 bash shasum

perl - 使用 Perl DBI 在 sqlite3 db 上运行 sql 语句时出错

perl - SQLite 的磁盘 I/O 错误

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

perl - 使用 Perl 从文本中提取多个项目