#php #mysql #json
#php #mysql #json
Вопрос:
Есть небольшая проблема с сохранением строки json в таблице mysql. Строка, например:
'{"variable":"content here with " addsleshes "}'
создано с помощью json_encode.
Сохраните эту строку в БД с помощью простой функции mysqli_query.
mysqli_query('insert into ... values '{"variable":"content here with " addsleshes "}' ');
После этого :
mysqli_query('select *..');
mysqli_fetch_array($res);
Когда я получу это поле из Mysql и попытаюсь использовать php json_decode, оно вернет NULL, потому что у меня больше нет косой черты перед » . Невозможно использовать функцию addslashes, так как она добавит косые черты также как «переменная «.
Не уверен, как решить эту проблему?
Комментарии:
1. Вам нужно будет показать, как вы храните эту строку и как вы ее извлекаете. Правильно выполненная система НЕ будет удалять эти косые черты из текста.
2. обновил вопрос. сейчас я использую для тестирования просто функцию mysqli_query на случай, если мой класс DB что-то меняет, но все та же проблема
3. ну, да, вы неправильно экранировали эту строку. Если бы вы это сделали, обратная косая черта, добавленная json_encode, попала бы в базу данных. Другими словами, вы страдаете от уязвимости sql-инъекционной атаки , и эта строка «повреждение» является ее симптомом.
Ответ №1:
Почему бы тебе не попробовать все наоборот.
Используйте mysqli_escape_string
перед фактической передачей JSON в mysqli_query
$json = '["Json","Just a Sample Data","Data 2"]'
mysqli_query('insert into ... values'.mysqli_escape_string($json));
Теперь, когда вы извлекаете данные из базы данных
mysqli_query('select *..');
mysqli_fetch_array($res);
Используйте stripslashes($str)
для удаления косых черт из JSON.
Это будет работать так же, как вы ищете.
Ответ №2:
Попробуйте:
'{"variable":"content here with \" addsleshes "}'
Комментарии:
1. Да, думал об этом, но я использую json_encode для создания строки json из массива php. итак, мне пришлось бы добавлять косые черты к каждой ячейке массива перед использованием json_enocde?
2. no. json_encode() сделает все экранирование за вас. Вам нужно выяснить, что / где удаляет косую черту из текста.