Как проверить наличие параметра, если он может быть нулём
Параметр page=0 исчезает в ветке с empty. Эта функция объединяет отсутствие значения с несколькими ложными значениями. Сначала разделите проверку наличия и проверку формата.
$raw = $_GET["page"] ?? null; $page = filter_var( $raw, FILTER_VALIDATE_INT, array( "options" => array( "min_range" => 0 ) ) ); if( $page === false || $raw === null ) $page = 0;
Строгое сравнение с false сохраняет целое 0. Для публичной пагинации, начинающейся с единицы, поменяйте нижнюю границу и значение по умолчанию. Не передавайте исходную строку в SQL или вычисление смещения. Проверьте отрицательное число, дробь и page[]=1.