powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Насколько безопасен данный код?
4 сообщений из 4, страница 1 из 1
Насколько безопасен данный код?
    #39646315
527470
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
PROCEDURE addNewUserData(IN arg_id BIGINT UNSIGNED, IN arg_data VARCHAR(255))
BEGIN
  --уникальны по id пользователя
  INSERT IGNORE INTO users (idUser, `data`)
    VALUES (arg_id, arg_data);
  IF ROW_COUNT() = 0 THEN
    INSERT INTO reservedData (`data`, `lock`) VALUES (arg_data, 0);
  END IF;
  SELECT u.`data` FROM users u WHERE u.idUser = arg_id;
END

PROCEDURE getUserDataById(IN arg_id BIGINT)
BEGIN
  DECLARE lockValue bigint;
  IF NOT EXISTS (SELECT 1 FROM users u WHERE u.idUser = arg_id) THEN
    UPDATE sequence SET id = LAST_INSERT_ID(id + 1) WHERE type = 1;
    set lockValue:= LAST_INSERT_ID();
    START TRANSACTION;
      UPDATE reservedData a SET `lock` = lockValue WHERE `lock` = 0 LIMIT 1;
      INSERT IGNORE INTO users (idUser, `data`) 
        SELECT arg_id, a.`data` FROM reservedData a
          WHERE a.`lock` = lockValue;
      IF ROW_COUNT() = 0 THEN
        UPDATE reservedData a SET `lock` = 0 WHERE `lock` = lockValue;
      ELSE
        DELETE FROM reservedData WHERE `lock` = lockValue;
      END IF;
    COMMIT;
  END IF;
  SELECT u.`data` AS `data` FROM users u WHERE u.idUser = arg_id;
END



Что хотел достичь данным кодом: где-то на стороне генерятся данные, по запросу от пользователя, если пользователь запрашивает несколько раз, то ему должны придти одинаковые данные в ответ, если получилось так что для одного пользователя сгенерировали несколько раз данные, то помещаем их в отдельную таблицу и "лишние" данные потом привязываем к другому пользователю, без генерации на стороне. Собственно интересует всё ли нормально в этом коде или может что нужно подправить или есть вообще более правильный вариант реализации подобного?
Сейчас используется так:
вызываем getUserDataById, если ничего не вернуло, то генерим данные, сохраняем через addNewUserData и результат который получили возвращаем пользователю.
...
Рейтинг: 0 / 0
Насколько безопасен данный код?
    #39646328
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
527470,

безопасен от чего?
...
Рейтинг: 0 / 0
Насколько безопасен данный код?
    #39646341
527470
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,

От взаимных блокировок, а также выполняет ли он поставленную задачу?
...
Рейтинг: 0 / 0
Насколько безопасен данный код?
    #39646390
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
527470а также выполняет ли он поставленную задачу?это тебе виднее
527470От взаимных блокировокпроверь
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Насколько безопасен данный код?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]