Как сохранить строку json в таблице mysql

#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() сделает все экранирование за вас. Вам нужно выяснить, что / где удаляет косую черту из текста.