Добавляет косые черты, mysql_real_escape всегда добавляет две косые черты?
У меня проблема со вставкой JSON в базу данных, я собираюсь взять переменные, json_encode их, удалить косую черту (из magic_quotes), а затем добавить обратно, чтобы экранировать кавычки в {"key":"value"}
К сожалению, strip_slashes в закодированной строке ничего не делает, и выводит это
{"content":"<p>This string has it\'s downsides</p>","date":1271352514}
Затем я попробовал addlashes и mysql_real_escape_string, оба вывода
"{\\"content\\":\\"<p>This string has it\\\'s downsides</p>\\",\\"date\\":1271352514}"
Я не могу понять, почему он добавляет две косые черты? И я рву на себе волосы из-за этого, каждый раз, когда я пытаюсь нанести полоску, они оставляют один в, а добавление слэша добавляет два. Любая помощь будет принята с благодарностью!
2 ответа
Во-первых, вы действительно должны рассмотреть возможность поворота magic_quotes
off... Цитировать руководство:
Предупреждение
Эта функция УСТАРЕЛА с версии PHP 5.3.0. Полагаться на эту функцию крайне не рекомендуется.
Как говорится, используйте json_encode()
создать свой массив JSON (вместо создания собственного) и завершить его одним вызовом mysql_real_escape_string()
при запросе как таковой:
$data = array();
$data['content'] = "<p>This string has it's downsides</p>";
$data['date'] = 1271352514;
$json = json_encode($data);
mysql_query("INSERT INTO data
VALUES ('" . mysql_real_escape_string($json) . "');");
Также группа PHP рекомендует использовать mysqli
вместо mysql
, Его объектно-ориентированный API и поддержка параметризованных запросов значительно повышают скорость разработки, сопровождение кода и безопасность.
Вот код выше, написанный с использованием mysqli
:
$data = array();
$data['content'] = "<p>This string has it's downsides</p>";
$data['date'] = 1271352514;
$json = json_encode($data);
$sqlInsert = $mysqli->prepare("INSERT INTO data VALUES (?);")
$sqlInsert->bind_param("s", $json);
$sqlInsert->execute();
Если у вас уже есть строка JSON, как это (кстати: в JSON /
тоже нужно убежать)
{"content":"<p>This string has it\'s downsides<\/p>","date":1271352514}
Тогда вам просто нужно подать заявку mysql_real_escape_string
чтобы избежать его, чтобы его можно было использовать для вставки в строковое объявление MySQL:
$query = "INSERT INTO … SET json='".mysql_real_escape_string($json).'"';
И если у вас включены магические кавычки, вы должны отключить или удалить их до этого шага, чтобы ваш $json
Строка действительно только допустимый JSON.