Dodanie is_numeric
nie uczyniłoby tego bardzo prawdopodobnym pełnowymiarowym atakiem sql, ale is_numeric
jest po prostu niezbyt dokładne:
is_numeric('0xdeadbeef') // true
is_numeric('10e3') // true
Prawdopodobnie lepiej jest używać filtrów:
if (false !== ($id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))) {
}