dim565
Искусственный Интеллект
(424764)
3 года назад
В этом коде нет сохранения в таблицу, либо делайте отдельный запрос UPDATE, либо если не планируете использовать данные из SELECT где-нибудь дальше в коде, можно переделать на запрос UPDATE statanew SET count = count + 1
ewe 2e¶ CoЛнЫшКоcBeTиТоЧеНЬяРкО*Высший разум (329729)
3 года назад
Можно у вас проконсультироваться?
Если не влом и если знаете.
А если таких запросов будет много в один момент времени? например, изначально было значение 1 и между моментом чтения переменной и моментом update её обратно произошло еще 100 других updates и истинное значение ее стало 102, но этот экземпляр скрипта об это не знает и напишет туда значение просто 2, вместо 103, как оно по его мнению должно быть.
Это ж неправильно?
Если влом рассказывать, можете просто ткнуть в какую-нибудь web-страничку для чтения.
Спасибо.
dim565Искусственный Интеллект (424764)
3 года назад
Я не интересовался этим вопросом, но думаю вы правы, будет работать неправильно.
Сейчас погуглил и нашел про блокировку запросов (FOR UPDATE):
mysql.ru/docs/man/InnoDB_locking_reads.html
англ. dev.mysql.com/doc/refman/8.0/en/innodb-locking-reads.html
Вроде оно?
Еще попадались статьи про транзакции webistore.ru/sql/tranzakcii-v-mysql, но в суть не вникал, если вы собираетесь тщательно разбираться в этом вопрос напишите потом пожалуйста, какой способ правильней
Сейчас код такой:
<? $db = подключение к бд;
$sql = "SELECT * FROM statanew";
$result = $db->query($sql);
$articles = $result->fetchAll(PDO::FETCH_ASSOC);
foreach ($articles as $article) {
$update = $article['count'];
}
@$update++;
?>
Код должен после захода на страницу, просто прибавлять к переменной +1 (что он уже и делает) и возвращать назад в таблицу, этого не происходит