我想知道是否还有将bind_param与SQL IN语句一起使用。根据perl文档,不能使用bind_param_array。有没有人遇到过同样的情况?
答案 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 ( ?, ?, ? )
然后你必须有三个种类。