当前位置: 首页 > 知识库问答 >
问题:

将JSON字符串作为字段数据放在MySQL上

盛浩阔
2023-03-14

我有这样的想法:使用PHP的json_encode将多维数组/非多维数组转换为JSON字符串,并将数据存储到SQL数据库中。

例如,我有一个名为'users'的表。表'users'有3个字段:id、name、data

使用php,我想获取用户John的数据:从用户中选择数据WHERE name='john'

现在“data”字段的值/文本如下所示:{“gender”:“male”,“birthday”:“8-jan-1991”,“country”:“UK”,“city”:“London”}

我将使用PHP的json_decode对“data”字段进行解码,然后使用自制的PHP函数将stdClass对象转换为数组。然后我可以在任何地方显示John的信息,比如:$user['data']['country']

这就省去了我在数据库中为国家、城市、生日等创建额外字段的麻烦,但它安全吗?使用这种方法在MySQL上存储数据是否存在缺点或问题。

共有1个答案

秦宏硕
2023-03-14

正确的转义,您就可以了,但我必须补充一点,这就是XML比json更好的格式,因为它还允许您在查询中使用XML内部的数据

<?xml version="1.0" encoding="UTF-8" ?>
<user>
   <gender>male</gender>
   <birthday>8-Jan-1991</birthday>
   <country>UK</country>
   <city>London</city>
</user> 

选择

SELECT ExtractValue(data, '//gender') AS gender FROM users WHERE name='john' AND EXTRACTVALUE(data, '//country') != 'UK';

http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html#function_extractvalue

 类似资料:
  • 问题内容: 我有一堆记录,日期格式为字符串,例如“ 04/17/2009” 我想将它们转换为mysql datetime字段 我计划使用foreach循环读取旧的日期值,并将新格式化的值插入每个记录的新字段中 什么是转换字符串的最佳方法…我认为php可能有一种自动执行此方法的方法? 谢谢 问题答案: 首先,将字符串转换为时间戳: 然后做一个

  • 问题内容: 我正在将ajax发布到webmethod上,我可以在客户端(通过Firebug)看到请求的状态为200,但未达到我的webmethod中的停止点(webmethod的第一行)。json参数一切正常,但是通过反序列化json的方式,我不得不将其更改为字符串。 js: aspx: 问题答案: 您在jQuery JSON帖子中缺少内容类型: 请参阅本文。当我遇到类似的问题时,它对我很有帮助:

  • 问题内容: 我具有来自Web服务的以下JSON字符串,并且正在尝试将其转换为 我在线上对此进行了验证,这似乎是正确的。现在我在android开发中使用以下代码来利用 这会引发异常和类型不匹配的异常。 问题答案: 在这里,您将获得JSONObject,因此请更改以下行: 具有以下内容: 之后

  • 问题内容: 我想将下面的字符串变量转换为spark上的dataframe。 我知道如何从json文件创建数据帧。 但是我不知道如何从字符串变量创建数据框。 如何将json字符串变量转换为dataframe。 问题答案: 对于Spark 2.2+: 对于Spark 2.1.x: 提示:这是使用重载。它也可以直接读取Json文件。 对于旧版本:

  • 我有一个RestController类,它有一个方法可以根据电影的标题搜索电影: 如果我发送一个json字符串 从邮递员到endpoint,我收到一个空白的回复。 然后我做了一个 就在进入方法后找到字符串filmSearch正是我从邮递员发送的JSON字符串。我的应用程序没有看到JSON和提取值从filmSearch在我的请求附加到应用程序内字符串filmSearch. 如果我移除 在请求映射的一

  • 请帮助解决此错误... 因为我在该对象上使用了bigdecimal类型,而没有添加一个操作@字段(type=FieldType.Double) 有没有办法配置默认的FieldType。大十进制加倍?或者我们需要在每个大十进制中添加字段注释