AVAVION
@AVAVION
Веб-разработчик

Универсальный метод обновления данных в БД?

Доброго времени суток, уважаемые пользователи Тостер. (Если конечно решите мой вопрос, то будете многоуважаемыми)

Я пишу класс, который собой представляет админ-панель, через которую можно добавлять, удалять и редактировать информацию в БД. У меня есть две схемы, и я хочу сделать универсальный способ обновления данных в этой схеме.

Столбцы разные везде.
5d87bd40330e7073893580.png
Сам метод, который собой представляет сгенерированный запрос.
5d87bd58aff2c574385258.png
Это первая схема.
5d87bd737cfc9280088903.png
А вот и вторая, здесь столбцов больше.
И вот я тут задумался... Я же не знаю, какой столбец захочет изменить пользователь. Помогите мне правильно сгенерировать запрос для SQL.
  • Вопрос задан
  • 428 просмотров
Решения вопроса 1
@McBernar
Кто вам мешает на лету собирать sql? Принимаете запрос в виде массива поле-значение и генерируете соответствующий запрос.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
FanatPHP
@FanatPHP
Чебуратор тега РНР
Подход нормальный, но в описании класса должны быть жетско прописаны имена таблицы и всех полей.
Имена полей в простейшем случае случае тупо засунуть в массив.

После этого ты можешь использовать их для формирования динамических запросов.
Например так: https://phpdelusions.net/pdo_examples/dynamical_update

$allowed - это твой список полей.
$_POST лучше не использовать напрямую, а передавать копию в метод, но принцип тот же - берем из поста только заполненные поля и добавляем в запрос.

Метод Update будет у класса-предка, от которого будут наследоваться классы дл работы с отдельными сущностями, такими как article. Таким образом в классе Article у тебя вообще не будет метода Update, но при этом ты будешь писать

$article->update($_POST);

и все будет прекрасно обновляться.
Ответ написан
@Randewoo
Уже вижу, Ваш SQL запрос уязвим на все 100% для SQL Injection.
Прикрутите просто RedBeanPHP как дочку-сыночка и все.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Блокировка:
1. Эксклюзиваня (запрет на любые транзакции): SELECT ...... FOR UPDATE
2. Разделяемая (оставить чтение другим): SELECT .... LOCK IN SHARE MODE

https://dev.mysql.com/doc/refman/8.0/en/innodb-loc...
Ответ написан
php666
@php666
PHP-макака
гугли ORM, ActiveRecord
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы