Спасибо всем. Каждый ответ был полезен, и я хотел бы разделить щедрость.
В конце, к моему удивлению, я смог сделать это так же, как и раньше, на основе принятого ответа
$fields = array("login","password");
$_POST['password'] = MD5($_POST['login'].$_POST['password']);
$stmt = $dbh->prepare("UPDATE users SET ".pdoSet($fields,$values)." WHERE id = :id");
$values["id"] = $_POST['id'];
$stmt->execute($values);
. Его можно обернуть в вспомогательную функцию , но я сомневаюсь, что есть необходимость. Он сократит код только на одну строку.
Код pdoSet:
function pdoSet($fields, &$values, $source = array()) {
$set = '';
$values = array();
if (!$source) $source = &$_POST;
foreach ($fields as $field) {
if (isset($source[$field])) {
$set.="`$field`=:$field, ";
$values[$field] = $source[$field];
}
}
return substr($set, 0, -2);
}
Ниже cmnds устранит проблему.
git pull --rebase
git push