有没有一种标准的方法来绑定SQL查询中的(标量)数组?我想 绑定到一个IN子句中,如下所示:
SELECT * FROM junk WHERE junk.id IN (?);
我碰巧正在使用Perl::DBI强制将参数标量的参数,因此我最终遇到 了无用的查询,例如:
SELECT * FROM junk WHERE junk.id IN ('ARRAY(0xdeadbeef)');
我将查询放在自己的.sql文件中,因此字符串已经形成。在答案提到动态创建查询字符串的地方,我可能会进行搜索并替换。
您指定“这是具有一个参数的查询的SQL” –在您需要多个参数时将不起作用。当然,这很痛苦。对于已经提出的建议,还有两个变体:
1)使用DBI-> quote代替占位符。
my $sql = "select foo from bar where baz in (" . join(",", map { $dbh->quote($_) } @bazs) . ")"; my $data = $dbh->selectall_arrayref($sql);
2)使用ORM为您做这种低级的工作。例如,DBIx :: Class或Rose :: DB :: Object。