В настоящее время я занимаюсь разработкой веб-сайта аукциона в рамках портфельного проекта, и я столкнулся с интересной проблемой, которая, похоже, не может быть решена.
В настоящее время я проверяю текущую самую высокую ставку (запрос 1) и затем, если ставка выше, чем та, которая хранится в данный момент, я вставляю новую ставку в базу данных (запрос 2).Довольно базовая логика, и, очевидно, если ставка ниже, пользователь в конечном итоге будет уведомлен.
Query 1:
$result = mysql_query("SELECT * FROM bids WHERE item_id = '".$_POST['id']."' ORDER BY bids.amount DESC LIMIT 1");
Query 2:
$query = sprintf("INSERT INTO bids(item_id,buyer_id,amount,created) VALUES('%s','%s','%s',NOW())",
mysql_real_escape_string($item_id),
mysql_real_escape_string($user_id),
mysql_real_escape_string($amount));
Примечание: я знаю, что с этим кодом есть серьезные проблемы с безопасностью, но это всего лишь пример ...
Однако я не уверен, возникнет ли ситуация, когда между разрывом в проверке цены и вставкой в базу данных другой запрос может повлиять на ускорение, вставку в базу данных и последующее разрушение текущей логики назначения ставок.
Будет ли достаточным использование транзакций с драйвером mysqli или PDO для правильной постановки ставок в очередь?
Предоставляет ли MySQL метод организации очереди запросов mysql, чтобы этого не происходило?