Как автоматизировать 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, числовые нет.