Обратный 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
директивы все еще должны быть выключены.