L'ajout de is_numeric
n'en ferait pas une attaque sql à part entière très probable, mais is_numeric
n'est tout simplement pas très exact :
is_numeric('0xdeadbeef') // true
is_numeric('10e3') // true
Il est probablement préférable d'utiliser des filtres :
if (false !== ($id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))) {
}