Есть код:
$q = $db->prepare('UPDATE table1 SET val1 = :val1, val2 = :val2 WHERE name = :name');
$q->execute(array(':val1' => $_POST["val1"], ':name' => 'Example'));
Как видно из примера, я присваиваю новые значения val1
и val2
. Проблема в том, что изменяемых ячеек у меня более 20, но часть из них может не требовать изменений (отсутствуют обновляемые значения). Можно сконструировать сам запрос и массив со значениями на if’ах, но это очень некрасиво.
Может, можно как-то по-другому? Чтобы в БД писались лишь те значения, которые получены?
Что-то вроде:
$values = ['val1' => $_POST["val1"], 'name' => 'Example'];
$values[:val2] = (isset($_POST["val2"])) ? $_POST["val2"] : null;
$q->execute($values);
@turambar Можно сделать по такому подобию.
$fields = [];
$params[':name'] = 'Example';
array_walk($$_POST, function ($value, $field) use(&$fields, &$params) {
$fieldParam = ':' . $field;
$fields[] = $field . ' = ' . $fieldParam;
$params[$fieldParam] = $value;
});
$q = $db->prepare('UPDATE table1 SET ' . implode(', ', $fields) . ' WHERE name = :name');
$q->execute($params);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть тестовый код в учебных целях, крутится на xampp:
Нужно что бы к каждой записи в блоге, отображались комментарии, оставленные непосредственно для записи
Озадачен вопросом и не мог понять и найти ответВот как выглядит моя ссылка и все работает хорошо