No, you cannot, in general (nor anywhere that I know of) use placeholders for column names in a sql statement. It is a good idea to use placeholders everywhere that you can, though. Here's one idea for a variable number of columns:
my %columns = (field1=>"value1", field2=>"value2");
my $sql_stmt = "update my_table ".column_list(\%columns).
" where id_field = ?";
my $sth = $dbh->prepare($sql_stmt);
$sth->execute(values %columns, $id_field);
sub column_list {
join(" ", map {"$_=?"} keys %{$_[0]});
}
Of course, arturo's answer below is perfectly good also for substituting one or any constant number of column names :-)