【发布时间】:2010-09-30 16:01:31
【问题描述】:
我想知道是否可以将 bind_param 与 SQL IN 语句一起使用。根据 perl 文档 bind_param_array 也不能使用。有没有人遇到过同样的情况?
【问题讨论】:
我想知道是否可以将 bind_param 与 SQL IN 语句一起使用。根据 perl 文档 bind_param_array 也不能使用。有没有人遇到过同样的情况?
【问题讨论】:
不,你不能轻易做到这一点。一种选择是使用$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);
两者都不是特别漂亮。
【讨论】:
如果您想要任意数量的占位符,则不会。您可以将其与 IN 一起使用,如
where foo in ( ?, ?, ? )
但是你必须恰好有三个绑定。
【讨论】: