sql - 是否有数组的 SQL 参数绑定(bind)?

标签 sql perl arrays binding parameters

是否有一种标准方法可以在 SQL 查询中绑定(bind)(标量)数组?我想绑定(bind)到 IN 子句中,如下所示:

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

我碰巧使用 Perl::DBI 它将参数强制为标量,所以我最终得到了无用的查询,例如:

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

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

编辑:这个问题有点像 Parameterizing a SQL IN clause? 的重复。 。我最初认为它应该这样关闭,但看起来它正在积累一些很好的 Perl 特定信息。

最佳答案

如果您不喜欢那里的 map ,可以使用“x”运算符:

my $params = join ', ' => ('?') x @foo;
my $sql    = "SELECT * FROM table WHERE id IN ($params)";
my $sth    = $dbh->prepare( $sql );
$sth->execute( @foo );

“?”两边需要括号因为这会强制“x”位于列表上下文中。

阅读“perldoc perlop”并搜索“二进制“x””以获取更多信息(位于“乘法运算符”部分)。

关于sql - 是否有数组的 SQL 参数绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/513818/

相关文章:

sql - 获取 SQL 树中的所有兄弟节点

VM中的SQL脚本需要很长时间才能执行

java - 预测 md5sum 字符串

perl - 在 Template Toolkit 中按值而不是键对哈希引用进行排序

php - 字符串转换为数组

mysql - SQL SELECT 或 CROSS JOIN 多个帐户和按行列中的 SUM 值

java - 如何在java中添加一系列sql时间值

linux - 在使用 perl 的 expect 发送命令之前,如何正确地等待终端中的提示?

c++ - 正确初始化智能指针数组

java - 在 Java 中创建一个队列数组