A adição de
is_numeric
não faria disso um ataque sql completo, mas is_numeric
não é muito exato:is_numeric('0xdeadbeef') // true
is_numeric('10e3') // true
Provavelmente é melhor usar filtros:
if (false !== ($id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))) {
}