Mysql реальная строка Escape функция PHP, добавляющая “\\” к моей полевой записи

Я отправляю форму своей базе данных MySQL с помощью PHP.

Я отправляю данные формы через mysql_real_escape_string($content) функция.

Когда запись обнаруживается в моей базе данных (регистрирующийся phpMyAdmin), всех моих двойных кавычек и одинарных кавычек оставляют.

Я вполне уверен, что это - проблема конфигурации PHP?

так:

$content = 'Hi, my name is Jascha and my "favorite" thing to do is sleep';
mysql_real_escape_string($content);
$query = 'INSERT INTO DB...'

подходит в моей базе данных как:

Привет, моим именем является Jascha и мой \, "любимая" вещь сделать спать

Кого я говорю, что сделать? (Я не могу получить доступ к php.ini).

5
задан Francisco Couzo 31 July 2017 в 20:52
поделиться

3 ответа

Вам нужно принимать во внимание магические кавычки при получении данных запроса. Если get_magic_quotes_gpc () равно true , то вам нужно запустить stripslashes () на входе. Лучшим способом было бы написать для этого функцию. Что-то вроде:

function get_string($array, $index, $default = null) {
    if (isset($array[$index]) && strlen($value = trim($array[$index])) > 0) {
        return get_magic_quotes_gpc() ? stripslashes($value) : $value;
    } else {
        return $default;
    }
}

.. которое вы можете использовать как

$input = get_string($_POST, 'input');

.. вместо

$input = $_POST['input'];

Сделайте то же самое для таких тривиальных вещей, как get_number () , get_boolean () , get_array () и так далее.

5
ответ дан 13 December 2019 в 22:06
поделиться

Если вы получаете данные $ content из формы (а не «как есть» в PHP-коде) , возможно, у вас проблема из-за кавычек Magic (см. magic_quotes_gpc )

В основном:

Когда magic_quotes включены, все ' (одинарные кавычки), " (двойные кавычки ), \ (обратная косая черта) и NUL экранируются с помощью обратной косой черты автоматически

Если включены магические кавычки (вы можете проверить это в выводе phpinfo () , например) , вы получите такое «двойное экранирование»:

  • Эти символы будут экранированы один раз магическими кавычками,
  • И затем, они будут экранированы второй раз mysql_real_escape_string


Хорошим решением в этом случае будет не прекращение использования mysql_real_escape_string , а отключение magic_quotes_gpc в вашей конфигурации ...

... Но, поскольку у вас нет доступа к нему, вам на самом деле придется "вернуть" эффект волшебных цитат, вызов stripslashes на входе, который вы получаете как $ _ GET и $ _ POST , прежде чем начать его использовать.

Примечание: это совет, который дан на странице руководства mysql_real_escape_string (цитата) :

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

6
ответ дан 13 December 2019 в 22:06
поделиться

Я знаю, что это немного поздно, но как новичку в php мне нужно было что-то действительно простое. Поэтому я использую этот код ниже, чтобы исправить проблему, описанную OP с magic_quotes_gpc У меня есть сервер под управлением php 5.2.8 и один под управлением 5.3

Мое веб-приложение использует datatables.net для отображения информации. Я начал получать ошибки JSON, когда данные сохраняются в базе данных со специальными символами.

Моя машина для разработки использует 5.3, где это не требовалось, но в php 5.2.8 мне нужно было использовать функцию stripslashes, чтобы сохранить значения в базе данных.

$description = mysql_real_escape_string($description);
// hack for php 5.2.8 //
if (get_magic_quotes_gpc()) {
     $description = stripslashes($description); 
     //echo "description: $description";
    }

Я понимаю, что это по сути тот же ответ, что и выше, но для меня он показался более подходящим. Надеюсь, это поможет другим, находящимся в той же лодке, что и я.....

-1
ответ дан 13 December 2019 в 22:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: