在过去的两天里,我一直在互联网上查看如何在mySQL数据库中处理存储为json的数据。我发现这里只有一篇文章,我没有运气。所以这是我的问题
这是我的表名为附加,只有2列... jobid和cost。 jobid是一个长度为5的int,显然是主键,成本只是存储为文本。我将所有成本合并到一列之下的原因是因为我的应用程序中的用户可以将他/她想要的任何东西放在那里,所以对我而言,成本是未知的。例如,一个条目可以是
24321,{“电话”:“20美元”} 要么 24322,{“电话”:“20美元”,“酒店”:“400美元”}
依旧等等,但我希望你明白这一点。
现在给出这个例子,我需要知道如何使用php处理存储为json的数据库中的数据。所以插入,选择和更新,但我想用一个给定的例子我可以做其余的如果有人可以帮助我理解如何处理和从数据库进出json数据。
哦,最后一件事。我不仅需要知道如何获取我需要的数据,例如:
$cost1 = {"telephone" : "$20"};
$cost2 = {"hotel" : "$400"};
我真的希望有人可以帮忙解决这个问题,因为就像我上面所说的那样,我花了2天的时间试图解决这个问题,但要么没有关于此问题的文章(除了本网站的文章)或与我的例子完全无关
答案 0 :(得分: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...
另一方面,当您使用对象保存到db时:
$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
希望这会有所帮助......
答案 1 :(得分: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.