Вот в мануале вычитал:
Применение mysql_real_escape_string() к каждой переменной, вставляемой в запрос, предотвращает SQL Injection. Нижеследующий код является наилучшим вариантом составления запросов и не зависит от установки Magic Quotes (чтобы не переживать, включены они или нет).
// Функция экранирования переменныхЗапрос, составленный таким образом, будет выполнен без ошибок, и взлом с помощью SQL Injection окажется невозможен.
function quote_smart($value)
{
// если magic_quotes_gpc включена - используем stripslashes
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
// Если переменная - число, то экранировать её не нужно
// если нет - то окружем её кавычками, и экранируем
if (!is_numeric($value)) {
$value = "'" . mysql_real_escape_string($value) . "'";
}
return $value;
}
// Составляем безопасный запрос
$query = sprintf("SELECT * FROM users WHERE user=%s AND password=%s",
quote_smart($_POST['username']),
quote_smart($_POST['password']));
mysql_query($query);
Я этой функцией пользуюсь, работает безотказно (никаких левых слэшей). Может подогнать под scapeString($data) (типа кавычки или в запросе писать или в функции оставить ну и массивы чтоб обрабатывала, если нужно)
_____________
1. Чудес не бывает.
2. Дерьмо случается.