Asegurate de que tengas la version que soporte ese tipo de funciones, si mal no estoy desde la 5.2....la 5.1 como que no las implementa.
si, desde la 5.2 pero ahora muchos de los hosting tienen 5.2.x
, igual vale la pena la aclaración y la verificación de la versión por parte del necesitado
Aun con ese codigo si meto AND BENCHMARK(99999999,MD5(0x123123)); sin comillas se jode el server.
supongo que lo que él quiere con ese código es volver comentario el SQL injection
intenta esto dentro de los if:
PHP:
$id = $_GET[$variable];
$patron = "(create|alter|drop|truncate|insert|update|delete|BENCHMARK|AND)";
$_GET[$variable] = preg_replace($patron, '--', $id);
pero de una vez te advierto que cualquier cosa que pongas luego del contenido del $_GET en la instrucción SQL no funcionara, quedara algo así:
select * from tabla WHERE id = 4 -- --(99999999,MD5(0x123123))
y si quieres poner un order, group, etc pues quedara como si fuera comentario y no lo hará
select * from tabla WHERE id = 4
-- --(99999999,MD5(0x123123)) order by id
la forma mas fácil si no dispones de la función que mencione antes y son pocos querys SQL es hacer in "cast", para el ejemplo
PHP:
$_id = intval($_GET["id"]);
o simplemente hacer un split/explode del espacio " "
PHP:
$id = explode(" ", $_GET["id"]);
$id = reset($id);
o la formula mas facil
, encierra el valor entre comillas
eso si reemplazando dentro de la variable las comillas que vayas a usar por null/vacio
select * from tabla WHERE id = '$_GET["id"]'
select * from tabla WHERE id = '4 AND BENCHMARK(99999999,MD5(0x123123))'
así no encontrará nada pero tampoco hará nada