Представьте, что $ _GET ['id'] было равно примерно этому
* FROM anytable_i_want; --
двойной перенос означает, что остальная часть вашей строки - комментарий ... так что теперь выполняемый вами sql:
SELECT * FROM anytable_i_want;
Единственный лучший способ уберечься от такого рода глупостей - это подготовленное заявление.Если вы используете, скажем, интерфейс PDO, вы делаете что-то вроде этого:
$HANDLE = $PDO->prepare('SELECT ? FROM mytable');
$HANDLE->execute(array($_GET['id']));
теперь независимо от того, что было отправлено как $ _GET ['id'], оно не будет иметь каких-либо странных эффектов.
mysql_real_escape_string
покроет вас, если вы будете использовать мое семейство функций mysql_, хотя существует дикий эксплойт, которому вы можете подвергнуться, если вы измените кодировку во время выполнения.