admin

数组有SQL参数绑定吗?

sql

有没有一种标准的方法来绑定SQL查询中的(标量)数组?我想
绑定到一个IN子句中,如下所示:

SELECT * FROM junk WHERE junk.id IN (?);

我碰巧正在使用Perl::DBI强制将参数标量的参数,因此我最终遇到
了无用的查询,例如:

SELECT * FROM junk WHERE junk.id IN ('ARRAY(0xdeadbeef)');

我将查询放在自己的.sql文件中,因此字符串已经形成。在答案提到动态创建查询字符串的地方,我可能会进行搜索并替换。


阅读 132

收藏
2021-05-10

共1个答案

admin

您指定“这是具有一个参数的查询的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。

2021-05-10