【发布时间】: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