Посмотри мою
обертку под MySql. Там это уже всё сделано.
if (!is_numeric($_GET['id']) or !is_int($_GET['id']+0))
Насчет подобных проверок... поверь, я "собаку съел" на этом, писав свою библиотеку и я скажу, что на самом деле мало кто из отвечающих сразу так напишет правильный ответ =) Все существующие в PHP механизмы определения чисел, все эти фильтры и расширения для оных - крайне плохо работают.
Если вкратце, то
вот метод определения целого числа. Вот
метод определения с точкой. В последнем есть небольшая бага, но в целом это работает:
foreach ([
'9223372036854775808', 9223372036854775808, // > PHP_INT_MAX + 1
1, '10', '+1', '1.1', 1.1, .2, 2., '.2', '2.',
'-2.', '-.2', null, [], true, false, 'string'
] as $value) {
echo $value . ':' . gettype($value) . ' is Integer? - ' . (isInteger($value) ? 'yes' : 'no') . PHP_EOL;
echo $value . ':' . gettype($value) . ' is Float? - ' . (isFloat($value) ? 'yes' : 'no') . PHP_EOL;
}
9223372036854775808:string is Integer? - yes
9223372036854775808:string is Float? - no
9.2233720368548E+18:double is Integer? - no
9.2233720368548E+18:double is Float? - yes
1:integer is Integer? - yes
1:integer is Float? - no
10:string is Integer? - yes
10:string is Float? - no
+1:string is Integer? - yes
+1:string is Float? - no
1.1:string is Integer? - no
1.1:string is Float? - yes
1.1:double is Integer? - no
1.1:double is Float? - yes
0.2:double is Integer? - no
0.2:double is Float? - yes
2:double is Integer? - no
2:double is Float? - yes
.2:string is Integer? - no
.2:string is Float? - yes
2.:string is Integer? - no
2.:string is Float? - yes
-2.:string is Integer? - no
-2.:string is Float? - yes
-.2:string is Integer? - no
-.2:string is Float? - no <---- тут только ошибка, не починил еще
:NULL is Integer? - no
:NULL is Float? - no
Array:array is Integer? - no
Array:array is Float? - no
1:boolean is Integer? - no
1:boolean is Float? - no
:boolean is Integer? - no
:boolean is Float? - no
string:string is Integer? - no
string:string is Float? - no