Обратный mysqlescapestring

В настоящее время у меня возникает эта проблема, когда я использую mysqlescapestring для вставки данных в мою базу данных, и после извлечения данные содержат много избыточных / символов. Есть ли способ изменить это?

Это мой код

$post_nameE = EscapeString($post_name);
    $post_descE = EscapeString($post_desc);
    $post_dateE = date("Y-m-d H:i:s");
    $post_contentE = EscapeString($post_content);
    $statusE = EscapeString($status);
    $tagE = EscapeString($tag);

    $sql="INSERT INTO post (post_id, post_name, post_desc, post_date, post_content, status, tags)
    VALUES (DEFAULT, '$post_nameE', '$post_desc', '$post_dateE', '$post_contentE', '$statusE', '$tagE' )";
    $res = dbQuery($sql);

    if ($res)
        echo "1 record added";
    else
        die('Error: ' . mysqli_error($res));

и определена escape-строка:

function EscapeString($s) {
    global $mysqli;
    return $mysqli->real_escape_string($s); 
}

Что входит в:

'The ice bucket challenge'

Что извлекается из базы данных и отображается:

\'The ice bucket challenge\'

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

1 ответ

Я предполагаю, что эти значения приходят из $_POST, В этом случае у вас естьmagic_quotes_gpc = true в php.ini, Это экранирует данные, которые отправляются через POST, GET и COOKIE. Выключи это (false), или в глобальном включенном / заголовочном файле сделайте:

$_POST = array_map('stripslashes', $_POST);

Существует также magic_quotes_runtime который экранирует данные при извлечении из базы данных. Это должно быть выключено.

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

Другие вопросы по тегам