Серверная обработка PHP - Вопросы по сайтостроению
  • Чаты 4chT.com в телеграмм
    Наши группы в телеграмм

Вопрос Серверная обработка PHP

Регистрация
22 Май 2013
Сообщения
77
Репутация
0
Спасибо
0
Монет
0
Допустим на сервере есть файлы index.php и example.php;

Есть БД с таблицей users (полями id и coins);

(Первый пользователь)
В файле index.php мы с помощью SQL запроса получаем по id текущее состояние монет coins в переменную $curr_coins;

Потом в этом же файле есть цикл, который занимает скажем секунд 10;

После цикла выполняется запрос на UPDATE таблицы users (по тому же id), необходимо увеличить поле coins на определенную сумму (допустим на 500 единиц): я беру переменную $curr_coins и прибавляю к ней 500, после чего обновляю новое значение в строке;

(Второй пользователь)
Параллельно с этим всем другой пользователь запускает example.php;

Так совпадает что пока у первого пользователя крутится цикл (10 секунд), второй пользователь изменяет его состояние монет coins;

В теории получится что в строку будут занесены данные, отличные от тех, где мы добавляли 500 и обновляли строку (потому что "настоящее" значение $curr_coins будет другим);

Если я прав и действительно
 
Регистрация
20 Дек 2013
Сообщения
85
Репутация
0
Спасибо
0
Монет
0
да, ты прав чтобы решить проблему, можно использовать что-то вроде транзакции можно сделать вручную, например, в виде отдельного столбца блокировки, выставляемого в начале серии запросов и убираемого в конце, а можно средствами СУБД последнее, разумеется, предпочтительнее
 
Регистрация
28 Сен 2013
Сообщения
95
Репутация
0
Спасибо
0
Монет
0
update `coins_table` SET `coins` = 500 + (select `coins` FROM `coins_table` WHERE `user` = 4) WHERE `user` = 4 Или второй раз запрашивай с сервера количество прямо перед апдейтом и ставь лок на таблицу/строку (если это можно сделать в твоей БД), чтобы никто ничего не поменял, пока будешь апдейтить. Или все изменения клади в очередь и пусть в фоне работает один единственный обработчик этой очереди.
 
Сверху Снизу