Задать вопрос
  • Как правильно экранировать символы в SQL запросы, если нужно отправить HTML-код?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    HTML никак специально экранировать не нужно. И вообще ничего экранировать не нужно. Экранирование - это треш, угар, прошлый век и инъекции. Данные в БД надо просто посылать отдельно от запроса.

    Удивительно, что на этот вопрос подписалось ещё столько народу.
    Ну это я не знаю - как подписаться на вопрос "сколько будет шестью шесть?". Не "дважды два", но близко.
    Работа с БД - это самые основы пхп, которые обсосаны в каждом учебнике со всех сторон. Неужели всё так плохо, что этот вопрос вызывает столь живой интерес, чтобы попасть в список интересных на тостере?

    Причем твоя лично проблема здесь совсем не в том, "как экранировать". HTML никак особо экранировать не нужно, базе данных абсолютно всё равно, что ты внее вставляешь. Твоя проблема в том, что ты в принципе не знаешь пхп и путаешься в основах языка, используешь устаревшую версию, которая не будет работать на живом сайте. И даже самый базовый синтаксис тебя пугает. Поэтому извини, я буду писать ответ не для тебя, а для тех, кто, в который раз, задается этим вечнозеленым вопросом, но по какой-то причине не смог освоить базовые навыки работы с гуглем/яндексом.

    Чтобы вставить данные в mysql, и вообще никогда не думать ни про какое "экранирование", надо
    1. Все переменные в запросе заменить на знаки вопроса
    2. Подготовить запрос к исполнению
    3. Привязать переменные к знакам вопроса
    4. Выполнить запрос.

    Как я уже говорил, функций, которые начинаются на mysql, в языке давно нет. Остаются только те, которые начинаются на mysqli и PDO. Вот для них я и приведу примеры.

    mysqli
    $type = 'testing';
    $reporter = "John O'Hara";
    $query = "INSERT INTO contents (type, reporter) VALUES(?, ?)"; // заменем
    $stmt = $mysqli->prepare($query); // подготавливаем
    $stmt->bind_param("ss", $type, $reporter); // привязываем
    $stmt->execute(); // исполняем

    Важно! Чтобы этот код работал, сначала надо правильно установить соединение mysqli
    PDO
    $type = 'testing';
    $reporter = "John O'Hara";
    $query = "INSERT INTO contents (type, reporter) VALUES(?, ?)"; // заменяем
    $stmt = $pdo->prepare($query); // подготавливаем
    $stmt->execute([$type, $reporter]); // привязываем и исполняем

    Важно! Чтобы этот код работал, сначала надо правильно установить соединение PDO

    Также можно использовать сторонние библиотеки, с которыми все еще проще. Но использование сторонних библиотек почему-то пугат новичков хуже чем зомби на кладбище в безлунную ночь, поэтому настаивать не буду
    Ответ написан
    18 комментариев