Использование Perl bind_param с оператором SQL IN

Возможный дубликат:
Есть ли привязка параметров SQL для массивов?

Мне было интересно, можно ли вообще использовать bind_param с операторами SQL IN. Согласно документации perl, bind_param_array также нельзя использовать. Кто-нибудь сталкивался с такой же ситуацией?

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


person Kevin    schedule 30.09.2010    source источник


Ответы (2)


Нет, вы не можете сделать это легко. Один из вариантов - использовать $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);

Ни один из них не является исключительно красивым.

person a'r    schedule 30.09.2010

Нет, если вам нужно произвольное количество заполнителей, нет. Вы можете использовать его с IN, как в

where foo in ( ?, ?, ? )

но тогда у вас должно быть ровно три привязки.

person Andy Lester    schedule 30.09.2010