После предложения предыдущего вопроса.
Теперь у меня есть счетчики посетителей, используя базу данных. При написании сценария я сомневался, что так помог SO.
Предположим, что в моей базе данных есть таблица с именем Total
и значение равно 5
.
Два разных посетителя посещают сайт одновременно, мой сценарий
$sqltc = "UPDATE visits SET Total='$ttl' WHERE Sr=1";
mysqli_query($link, $sqltc);
попытается обновить базу данных.
Теперь мое сомнение в том, что будет новым значением в таблице?
5
ИЛИ 6
ИЛИ 7
ИЛИ anything else
?
Я знаю, что это редкий случай, но сайт, на котором будет использоваться сценарий, является сайтом викторины, и одновременно будет присутствовать масса посетителей.
Полный код скрипта:
$sql = "SELECT * FROM visits WHERE Sr = '1'";
$result = mysqli_query($link, $sql);
$row = mysqli_fetch_array($result);
$date = $row['Date'];
$ttcounter = $row['Total'];
$ttcounter++;
$ttl = $ttcounter;
$sqltc = "UPDATE visits SET Total='$ttl' WHERE Sr=1";
mysqli_query($link, $sqltc);
Более простым решением было бы сделать добавление, подобное этому
$sqltc = "UPDATE visits SET Total=Total+1 WHERE Sr=1";
Это просто добавит одно к существующему значению Total
и вам больше не нужно будет извлекать значение старой строки и что-то добавить к нему, а затем снова обновить строку.
Это также устраняет вероятность того, что 2 посетителя попытаются извлечь текущее значение Total
и оба посетителя переписывают текущее значение 5 с 6, например. MySQL будет следить за блокировкой строки, чтобы только один посетитель мог применить свое обновление, поэтому вы получите правильное значение 7.