Я использую настроенную версию сценария DGNews (теперь уже не существующую) на моем сайте. В этом скрипте есть простой метод подсчета количества попаданий:
$queryfull = "SELECT * FROM news_publish WHERE id='$newsid'";
$qryfull = @mysql_query($queryfull,$connect) or die ("Wrong Query");
$rowfull = mysql_fetch_array ($qryfull);
$c=$rowfull[click];
$c++;
$d=$c;
@mysql_query("update news_publish set click='$d' where id=$newsid");
Я знаю, что этот скрипт использует устаревшие методы запросов MySQL, и в настоящее время я не в состоянии выполнить полное обновление.
Но моя проблема в том, что поле ‘click’ (int) во всех строках базы данных время от времени сбрасывается в 1. Я не могу понять, как это происходит. Это происходит только один раз в год или около того. Это результат какой-то попытки MySQL инъекции или что-то? Может кто-нибудь выяснить, что здесь происходит?
благодарю вас
ОБНОВИТЬ
Сбрасывает указанное поле на ВСЕ строки, а не в одну строку
$queryfull = "SELECT * FROM news_publish WHERE id='$newsid'";
$qryfull = @mysql_query($queryfull,$connect) or die ("Wrong Query");
$rowfull = mysql_fetch_array ($qryfull);
$c=$rowfull['click'];
$d=$c++;
@mysql_query("update news_publish set click='$d' where id=$newsid");
Но вы можете запустить только запрос на обновление, как предложено Barmar в комментариях
@mysql_query("update news_publish set click=click+1 where id=$newsid");
И это все
Я не могу точно знать, где происходит переполнение, но это поможет вам.
alter news_publish modify click bigint
bigint намного больше, чем int.