@Pho_en_ix

Как сделать очередь запросов?

Добрый день. Имеется небольшой скрипт для примера

<?php
$q = mysqli_query($mysqli, 'SELECT * FROM testbase WHERE id = 1');

if(($q['count_clicks'] - 1) < 1)
{
	my_query($mysqli, 'UPDATE testbase SET count_clicks = 10 WHERE id = 1');
	echo 'Ты нажал первее';
}
else		my_query($mysqli, 'UPDATE testbase SET count_clicks = count_clicks - 1 WHERE id = 1');


function my_query($mysqli, $query)
{
	$sql = mysqli_query($mysqli, $query);
	if(!$sql)		 error_log($log);
	return $sql;
}


Суть в том, что когда остаётся последний клик и два человека запускают данный скрипт одновременно, то есть вероятность того, что им обоим может выдать "Ты нажал первее". С чем это связано и как решить эту проблему?

Версии

Веб-сервер: Apache 2.4
PHP: 7.0.30-0+deb9u1

MariaDB 10.1.26-MariaDB-0+deb9u1 - Debian 9.1
Тип таблиц: MyISAM
  • Вопрос задан
  • 629 просмотров
Пригласить эксперта
Ответы на вопрос 2
Sanes
@Sanes
При записи таблица блокируется.
https://habr.com/post/150075/
Ответ написан
@grinat
Насколько понял тут достаточно:
UPDATE testbase SET count_clicks = count_clicks - 1 WHERE id = 1 AND count_clicks >= 0
В ответ mysql должно вернуть ответ сколько запись было изменено в результате запроса. Если 1 значит он первый, если 0 изменено, значит счетчки уже отрицательный и он не первый.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы