-1

Всем добрый вечер! Подскажите, пожалуйста, как я могу защитить свои MySQL запросы от SQL инъекции?

$sql = "SELECT * FROM users WHERE username LIKE '$search'";
$query = "SELECT username, subject, message, DATE_FORMAT(created, '%d-%m-%Y %T') AS `date` FROM messages WHERE id='$a'";

И так далее...

Написал вот такую чудо функцию на PHP:

function sanitizeString($var)
{
    trim($var);
    strip_tags($var);
    htmlspecialchars($var);
    stripslashes($var);
    mysql_real_escape_string($var);
}

Только эта функция почему-то вычищает все под чистую ;-((

Подскажите, пожалуйста, мне верное решение данной проблемы. Заранее спасибо.

Nicolas Chabanovsky
  • 51,426
  • 87
  • 267
  • 507
spoilt
  • 1
  • Тааа лааадно вам, ребяяят =) Как будто в ответе моем все было неправильно =) Ну ошибся в 2-3 строчках и что? – AseN Jun 14 '12 at 17:23
  • 2
    $sql = "SELECT * FROM users WHERE username LIKE '%".mysql_real_escape_string ($search)."'"; Тему можно закрывать! – spoilt Jun 14 '12 at 17:24
  • Чето не пойму, как ваша функция работает если результат она не возвращает и $var передается не по ссылке? – KiTE Jun 14 '12 at 17:25
  • 2
    @Asen минусы дают шанс подумать! иногда подумать после того как сделать тоже хорошо! – Palmervan Jun 14 '12 at 17:25
  • да ладно, и без них можно думать,поверьте! =)))) – AseN Jun 14 '12 at 17:31
  • оффтоп: @AlexWindHope цитата из ссылки - "Особые чувства я питаю к смайлу ХД и его вариациям. Если ещё и раскладку переключить лень…" (очень хорошо подметил человек) – Palmervan Jun 14 '12 at 17:41
  • Биндинг ИМХО проще и надёжнее – sercxjo Jun 14 '12 at 20:01

2 Answers2

2

В функции нет return $var; в конце, поэтому и ничего не возвращает. И вы не правильно применяете функции, нужно

$var = mysql_real_escape_string($var);

иначе в return вернется то что вы и передавали изначально.

И зачем там все это ? Достаточно одного mysql_real_escape_string, только если magic_quotes_gpc включен, входящие данные нужно еще обработать функцией stripslashes(). И не забывайте данные в запросе обрамлять кавычками, иначе никакой mysql_real_escape_string вам не поможет.

tranceman
  • 1,073
  • Ок, спасибо, сейчас исправлю... Хотел написать уникальную функцию, чтобы использовать ее для очистки пользовательского ввода(в формах), но видимо не судьба. – spoilt Jun 14 '12 at 17:44
1

Достаточно mysql_real_escape_string()

KiTE
  • 8,180