Как автоматизировать update таблицы mysql?

Приходят данные через пост, их может быть как 10 так и 15, а может и вовсе 1, зависит от настроек пользователя.

Нужно данными которое пришли обновить таблицу.

И делать

if(isset($_POST['name'])) {
  $usr_upd = $dbpdo->prepare(" UPDATE user SET user_name = :user_name ");
  $usr_upd->bindParam('user_name', $_POST['name'], PDO::PARAM_STR);
  $usr_upd->execute();
}

if(isset($_POST['sname'])) {
   //code
}

//etc

Делать проверки ифами 20 раз, мне кажется не лучший вариант, если не худший. Думаю с подобной задачей(проблемой) уже кто-то сталкивался и наверняка есть оптимальное решение. Знающих прошу помочь, буду благодарен.


Ответы (1 шт):

Автор решения: Akina

Пример.

Таблица и данные:

CREATE TABLE user (id INT PRIMARY KEY,
                   fname VARCHAR(64),
                   lname VARCHAR(64),
                   age INT);
INSERT INTO user VALUES
(1, 'Vassily', 'Pupkin', 20),
(2, 'idiosinkrazy', 'Ziper-Molnienossny', 25);
SELECT * FROM user;
id | fname        | lname              | age
-: | :----------- | :----------------- | --:
 1 | Vassily      | Pupkin             |  20
 2 | idiosinkrazy | Ziper-Molnienossny |  25

Переданные параметры для обновления:

SET @parameters := '{"id":1,"fname":"Vasily","age":21}';

Запрос на обновление и результат:

UPDATE user
SET fname = COALESCE(JSON_UNQUOTE(JSON_EXTRACT(@parameters, "$.fname")), fname),
    lname = COALESCE(JSON_UNQUOTE(JSON_EXTRACT(@parameters, "$.lname")), lname),
    age = COALESCE(JSON_EXTRACT(@parameters, "$.age"), age)
WHERE id = JSON_EXTRACT(@parameters, "$.id");
SELECT * FROM user;
id | fname        | lname              | age
-: | :----------- | :----------------- | --:
 1 | Vasily       | Pupkin             |  21
 2 | idiosinkrazy | Ziper-Molnienossny |  25

db<>fiddle here

PS. Строковые данные в JSON (не в таблице!) требуют JSON_UNQUOTE, числовые нет.

→ Ссылка