The $sth is a mutable string… Which means you can change it at runtime!

Here's an example of a modified $sth at runtime:

  my $up_sql = defined($updated_at) ? 'updated_at < ? AND ' : undef;
  my $sql = "SELECT * FROM mytable WHERE $up_sql type_id = ? AND serial_number 
IN (
              SELECT serial_number FROM anothertable WHERE device_id = ?)";
  my $sth = $dbh->prepare($sql);
  my $i = 1;
  if (defined($up_sql)) {
    $sth->bind_param($i, $updated_at, SQL_INTEGER); $i++;
  }
  $sth->bind_param($i, $pass_type_id, SQL_VARCHAR); $i++;
  $sth->bind_param($i, $device_id, SQL_VARCHAR); $i++;
  $sth->execute;



On Oct 22, 2012, at 9:16 AM, Tim Bowden <tim.bow...@mapforge.com.au> wrote:

> Is it possible, and if so, how can I set the number of placeholders in a
> prepared statement at runtime?
> 
> IE, given something like:
> 
> my $sth = $dbh->prepare("INSERT INTO $table ($fields) VALUES (?,?,?));
> 
> which is fine if I know how many fields I'm inserting into, but what if
> I don't know till runtime how many fields?  How can I put the (?,?,?)
> into a variable and have it recognised as placeholders?
> 
> Thanks,
> Tim Bowden
> 

Reply via email to