Мне кажется, надо отказаться от идеи представлять суперсложную таблицу на вебстранице, они для этого не предназначены. Сделайте экспорт в Excel, PDF или что лучше подойдет, в зависимости от цели.
Нужно найти сообщение об ошибке. Возможно, в файле error.log. Похоже, используется устаревшая функция (или функции). Там, где в таких случаях PHP 7 выдавал Warning и продолжал работу, версия 8 выдает Fatal Error и останавливается.
Nik Faraday, В таблице делаете поле типе DATETIME, по умолчанию CURRENT TIMESTAMP. Таким образом, оно будет заполняться автоматически.
При выборке за день задаете WHERE DATE(имя_поля)=требуемая_дата. Вот и статистика за день.
Никаких костылей здесь нет.
Кстати, IP имеет смысл записывать, хоть оно и не идентифицирует юзера, но несет много информации.
Если кто-то нечаянно нажмет CTRL-R, статистике это абсолютно не повредит.
Если же кто-то будет усердно нажимать эту комбинацию в течение часа, он явно заслужил наше дополнительное внимание. Такого юзера легко выделить и убрать его заходы из таблицы.
Мне кажется, даже это слишком сложно. Никаких сумм никуда не закидывается, просто при каждом вызове страницы в конце добавляется вставка этого вызова в БД.
Записывать можно URL, параметры, инфо о браузере, время и т.п. Об ID записи вообще не надо думать, просто таблица с автогенерацией ID. Никакие ON DUPLICATE тогда не нужны.
Для статистики - COUNT, WHERE, ORDER BY и т.д. (я про MySQL, но, полагаю, и в POSTGRES есть такое)
И ради бога, никаких библиотек, это чрезвычайно просто в реализации.
Я бы сказала, что передача всего объекта лучше с точки зрения потенциальных изменений, когда остальные значения объекта могут тоже потребоваться. Тем более если, судя по ответам, затраты одинаковые.
Можно просто получать всю строку в качестве параметра и разбирать ее уже средствами PHP.
Например, у меня в htaccess вот что:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !^.*(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$
RewriteRule ^(.*)$ index.php?p=$1 [L,QSA]
Получаю p в виде "/Var3/Value3/Var1/Value1/Var2/Value2" и дальше следую логике своего фреймворка.
Это не совсем то, что Вы ищете, но работает :)