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.
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.