使用Perl bind_param和SQL IN语句

时间:2010-09-30 16:01:32

标签: sql perl dbi

  

可能重复:
  Is there SQL parameter binding for arrays?

我想知道是否还有将bind_param与SQL IN语句一起使用。根据perl文档,不能使用bind_param_array。有没有人遇到过同样的情况?

http://search.cpan.org/perldoc?DBI#bind_param_array

2 个答案:

答案 0 :(得分:9)

不,你不能轻易做到这一点。一种选择是使用$dbh->quote,例如

my @values = (1,2,3,4);
my $sql = "SELECT * from my_table WHERE ID IN (";
$sql .= join(',', map { $dbh->quote($_) } @values)
$sql .= ')';

或者您可以创建必要的占位符并将数组作为绑定参数传递,例如

my @values = (1,2,3,4);
my $sql = "SELECT * from my_table WHERE ID IN (";
$sql .= join(',', map { '?' } @values);
$sql .= ')';

my $sth = $dbh->prepare($sql);
$sth->execute(@values);

两者都不是特别漂亮。

答案 1 :(得分:1)

如果您想要任意数量的占位符,请不要。您可以将它与IN一起使用,如

where foo in ( ?, ?, ? )

然后你必须有三个种类。