【问题标题】:Saving JSON to SQL将 JSON 保存到 SQL
【发布时间】:2015-05-22 13:40:32
【问题描述】:

我将 JSON 存储在 MsSql 数据库中,然后通过 PHP 脚本将其传递给 Javascript,其中一个 JSON 值是传递给 jQuery-dateFormat 的格式字符串,例如“yyyy-MM-dd” .

在我想包含不属于格式化字符串的额外文本之前,它非常有效,特别是 d、h、a 或 p 字符。幸运的是,有一种方法可以将字符串作为 jQuery-dateFormat 的一部分进行转义,如果我将文本用单引号 (') 括起来,我就可以使用未替换的受影响字符。

当我尝试通过现有的 PHP 脚本将带有此附加值的 JSON 保存回数据库时,它不起作用。

现在对于一些代码,我使用标准 <textarea> 作为 JSON 数据的输入,并通过使用在服务器上对其进行验证;

function fValidJson($input) {
    json_decode($input);
    switch (json_last_error()) {
        case JSON_ERROR_NONE:
            return $input;
            break;
        default:
            return false;
            break;
    };
};

如果$input 通过测试,我将使用更新数据库;

odbc_exec($conn, $update);

没有任何数据的 dateFormat 格式 $update 看起来像这样;

update data set json = '{"folder": "example"}' where id = 1

带有dateFormat的数据$update可以是这样的;

update data set json = '{"folder": "example", "format": "report-yyyy-MM-dd"}' where id = 1

通常这会很好,除非我想保留“报告”中的“p”并将其转换为“a.m./p.m”。通过 jQuery-dateFormat。一次转义“p”;

update data set json = '{"folder": "example", "format": "re\'p\'ort-yyyy-MM-dd"}' where id = 1

json_last_error() 给我一个错误,同时转义两次;

update data set json = '{"folder": "example", "format": "re\\'p\\'ort-yyyy-MM-dd"}' where id = 1

更新数据库表行时出错。第三次转义会返回与json_last_error() 相同的问题。

这种行为是意料之中的。 JSON 不能包含单引号 ('),单引号 (') 会混淆 SQL。那么我还有哪些其他选项可以将此 JSON 字符串保存到 SQL 中?

【问题讨论】:

  • Escape 你的输入,例如,或者使用准备好的 SQL 语句
  • 为什么需要字符串'report'作为格式的一部分,而不仅仅是日期格式?
  • @BrianGlaz 因为我想为自己减少工作,格式化的输出实际上是一个文件名,有时文件名中有普通文本和日期。如果我想要“jan report 2015”之类的内容,它也会变得更加灵活。
  • @bodi0 我一直在逃避我的输入,我想。你能详细说明一下吗?
  • jquery 日期格式何时/何地转换它?在你从数据库中获取并尝试在前端显示之后?

标签: javascript php jquery sql-server json


【解决方案1】:

尝试以下操作:

更新数据集 json = '{"folder": "example", "format": "re''p''ort-yyyy-MM-dd"}' where id = 1

report中p前后的引号是两个单引号。因为json中允许单引号,不需要转义,但是在mssql中需要用两个单引号转义一个单引号。

【讨论】:

  • 你试过了吗?您的链接说,单引号不需要转义,但不允许转义的单引号。
  • 我试过了,它确实有效。然而,当我读回它时,我只得到一个引用。输出也被复制到输入中,因此如果我尝试提交,它会再次导致错误。目前不确定我是否会使用 str_replace() 将双引号放回原处或使用准备好的语句...
  • 如果 json 变量包含反斜杠怎么办?
猜你喜欢
  • 2016-07-30
  • 1970-01-01
  • 2021-09-24
  • 2015-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-17
相关资源
最近更新 更多