L'aggiunta di is_numeric
non renderebbe questo un vero e proprio attacco sql molto probabile, ma is_numeric
non è molto esatto:
is_numeric('0xdeadbeef') // true
is_numeric('10e3') // true
Probabilmente è meglio usare i filtri:
if (false !== ($id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))) {
}