【问题标题】:How to store json string in mysql table如何将json字符串存储在mysql表中
【发布时间】:2014-07-02 18:24:11
【问题描述】:

在 mysql 表中存储 json 字符串有一个小问题。 字符串例如:

'{"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,因为我不再有 " 之前的斜杠。不能使用 addlashes 函数,因为它也会添加斜杠,如 \"variable\"。 不知道如何解决这个问题?

【问题讨论】:

  • 您必须展示如何存储此字符串以及如何检索它。正确完成的系统不会从文本中删除这些斜线。
  • 更新了问题。我现在使用简单的 mysqli_query 功能进行测试,以防我的数据库类正在改变某些东西,但仍然是同样的问题
  • 嗯,是的,你没有正确地转义那个字符串。如果你有,json_encode 添加的反斜杠就会进入数据库。换句话说,您遇到了sql injection attack 漏洞,而这个字符串“损坏”就是它的症状。

标签: php mysql json


【解决方案1】:

你为什么不试试反过来呢。

在将 JSON 实际传递给 mysqli_query 之前使用 mysqli_escape_string

$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 "}' 
    

    【讨论】:

    • 是的,正在考虑这个,但我使用 json_encode 从 php 数组创建一个 json 字符串。所以我必须在使用 json_enocde 之前对每个数组单元进行添加斜杠?
    • 没有。 json_encode() 将为您完成所有转义。您需要弄清楚从文本中剥离斜线的内容/位置。
    猜你喜欢
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 2013-03-05
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    相关资源
    最近更新 更多