I would not have one fixed sql statement in this case. I would just build it dynamically on each record. Perhaps something like the prepare_cached examples in the DBI docs (it would be easy enough to tweak the insert or select example to do an update), although I would use prepare and not prepare_cached, and just update the columns that need to be updated. You could use placeholders, or use the quote method to paste the values directly into the sql statement.
in reply to How to get a placeholder to keep the current column value?
If there are really only 4 fields that could be updated, and there are alot of records to update, then using prepare_cached there would only be at most 2**4 - 1 = 15 different statements cached, which is not bad.
If this is only an example, and there are really many more fields, then prepare_cached would be a very bad option.