1

Possible Duplicate:
Is there SQL parameter binding for arrays?

I was wondering if there is anyway to use bind_param with SQL IN statements. According to perl documentation bind_param_array cannot be used as well. Has anyone come across the same situation?

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

Community
  • 1
  • 1
Kevin
  • 13
  • 1
  • 3

2 Answers2

10

No you can't do this easily. One option is to use $dbh->quote, eg.

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

Or you can create the necessary placeholders and pass the array in as bind parameters, eg.

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);

Neither is exceptionally pretty.

a'r
  • 35,921
  • 7
  • 66
  • 67
1

Not if you're wanting an arbitrary number of placeholders, no. You can use it with an IN, as in

where foo in ( ?, ?, ? )

but then you must have exactly three binds.

Andy Lester
  • 91,102
  • 13
  • 100
  • 152