2010-09-30 3 views
1

Можно создать дубликат:
Is there SQL parameter binding for arrays?Использование Perl bind_param с SQL В заявлении

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

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

ответ

8

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

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

where foo in (?, ?, ?) 

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

Смежные вопросы