2016-11-01 4 views
0

За последние 2 дня я просматривал в Интернете, как обрабатывать данные, хранящиеся как json в базе данных mySQL. Все, что я нашел, было одной статьей, в которой я последовал без везения. Итак, вот мой вопросОбработка данных JSON с mySQL и php

Это мой стол, который называется дополнительным с 2 столбцами только ... jobid и стоит. jobid - это int длиной 5 и, очевидно, первичный ключ, затраты просто сохраняются как текст. Причина, по которой я объединил все затраты под одной колонкой, заключается в том, что пользователь в моем приложении может поставить туда, где он хочет, поэтому мне неизвестны затраты. Например одна запись может быть

24321, { "телефон": "$ 20"} или 24322, { "телефон": "$ 20", "Отель": "$ 400"}

и т.д. и так далее, но я надеюсь, что вы понимаете.

Теперь, учитывая этот пример, мне нужно знать, как обрабатывать данные из базы данных, хранящейся как json, используя php. Поэтому вставьте, выберите и обновите, но я думаю, что с одним приведенным примером я могу сделать все остальное. Если кто-то может помочь мне понять, как обрабатывать json-данные из базы данных и из нее.

О, и последнее. Мало того, что мне нужно знать, как извлечь данные, мне нужно, чтобы быть в состоянии отделить его слишком например:

$cost1 = {"telephone" : "$20"}; 
$cost2 = {"hotel" : "$400"}; 

Я действительно надеюсь, что кто-то может помочь с этим, потому что, как я уже говорил выше, я провел 2 дня, пытаясь получить свой (кроме одного из этого сайта) или полностью не относящегося к моему примеру

+1

Вы пробовали json_encode для сохранения в db ... и json_decode после прочтения из базы данных? – barudo

+0

Какая версия MySQL? MySQL 5.7.8 представил поддержку родного типа данных JSON, вы можете проверить это. Вот хорошая статья на эту тему: https://www.sitepoint.com/use-json-data-fields-mysql-databases/ – jcorry

+0

Какую версию mysql вы используете? –

ответ

1

Вы помечено как PHP, так что вы можете использовать функции PHP: json_encode и json_decode.

Например, когда вы читаете (SELECT) и получил это значение затрат в строке, соответствующее первичный ключ 24322:

//after you query db and got the cost in string... 
$sql = "SELECT * FROM additional"; 
$result = mysqli_query($conn,$sql); $row = mysqli_fetch_array($result); 
//from your comment below.... just changed to $cost so I don't have to change everything here... 
$cost = $row['costs']; 
//$cost = '{"telephone" : "$20", "hotel" : "$400"}' 
//you just have to: 
$cost = json_decode($cost); 
// result in an object which you can manipulate such as: 
print_r($cost->telephone); 
// $20 or: 
print_r($cost->hotel); 
//$400; 
//or if you want to go through all of the costs... you change that to array: 
$cost = (array)$cost; //or on your json_decode you add a TRUE param... ie(json_decode($cost, TRUE))... 
print_r($cost); 
//will produce an associative array: ['telephone'=>'$20', 'hotel'=>'$400'] 
//for which you can do a foreach if you want to go through each value... 

С другой стороны, когда вы сохраните в БД с объектом:

$cost = (object)['hotel'=>'$300', 'taxi'=>'$14']; 
//you json_encode this so you can write to db: 
$cost = json_encode($cost); 
//a string... you can then use $cost to write to db with (insert, update, etc) 

Примечание: json_decode требует ввода строки, кодируемой UTF-8. Поэтому вам может потребоваться заставить ваш сервер mysql предоставлять UTF-8. Некоторое число: https://www.toptal.com/php/a-utf-8-primer-for-php-and-mysql

Надеюсь, что это поможет ...

+0

, когда $ sql = «SELECT * FROM extra»; $ result = mysqli_query ($ conn, $ sql); $ row = mysqli_fetch_array ($ result); $ data = $ row ['costs']; и echo $ data я получаю {«телефон»: «$ 20»}, но когда я добавляю строку json_decode ($ data); ничего не получилось повторять больше –

+0

$ data -> is string? похоже ли это? «{« phone »:« $ 20 »,« hotel »:« $ 400 »} ' – barudo

+0

вы не можете его откликнуться, если добавить json_encode ... try print_r ... или var_dump ... reason: теперь это объект или массив .... в зависимости от данных там ... – barudo

0

Вы можете использовать json_encode() и json_decode() на протяжении всего вашего обновления или вставки.

В основном

json_encode() принимает Array и возвращает JSON в String

json_decode() принимает JSON в качестве String и возвращает Array

http://php.net/manual/en/function.json-encode.php

Так что в вашем случае, когда вы хотите обновление 24321 , {"telephone" : "$20"} вы должны декодировать как

$array = json_decode($row['jsonDataOrWhateverTheColumnNameIs'],true); $array['telephone'] = "40$"; ... ... $jsonString = json_encode($array); // Use this string with your update query.

+0

, как я уже говорил выше, я уже пробовал это без успеха, и я сказал, что в моем вопросе и в одном своем комментарии со ссылкой к подобному вопросу с этого сайта, который предлагает ваш ответ ... в основном причина, по которой я ниспроверг вас –

Смежные вопросы