我遇到了将JSON插入数据库的问题,我的目的是获取变量,json_encode它们,删除斜杠(来自magic_quotes),然后添加反斜杠以逃避{“key”中的引号:“值“}
不幸的是,编码字符串上的strip_slashes没有做任何事情,并输出此
{"content":"<p>This string has it\'s downsides</p>","date":1271352514}
然后我尝试了addslashes和mysql_real_escape_string,两者都是输出
"{\\"content\\":\\"<p>This string has it\\\'s downsides</p>\\",\\"date\\":1271352514}"
我无法理解为什么它会添加两个斜杠?而且我正在撕掉我的头发,每当我尝试将它留下的条纹,并添加斜线添加两个。任何帮助都将非常感激!
答案 0 :(得分:0)
如果您已经有这样的JSON字符串(顺便说一下:在JSON中,/
也需要进行转义):
{"content":"<p>This string has it\'s downsides<\/p>","date":1271352514}
然后你只需要在它上面应用mysql_real_escape_string
来逃避它,以便它可以用来将它插入到MySQL字符串声明中:
$query = "INSERT INTO … SET json='".mysql_real_escape_string($json).'"';
如果你启用了Magic Quotes,那么在该步骤之前你应该disable or remove them,这样你的$json
字符串才真正是有效的JSON。
答案 1 :(得分:0)
首先,您应该考虑关闭magic_quotes
...引用the manual:
警告
自PHP 5.3.0起,此功能已 DEPRECATED 。非常不鼓励依赖此功能。
话虽如此,使用json_encode()
来构建您的JSON数组(而不是构建自己的JSON数组),并在查询时完成对mysql_real_escape_string()
的单个调用:
$data = array();
$data['content'] = "<p>This string has it's downsides</p>";
$data['date'] = 1271352514;
$json = json_encode($data);
mysql_query("INSERT INTO data
VALUES ('" . mysql_real_escape_string($json) . "');");
此外,PHP小组建议您使用mysqli
而不是mysql
。其面向对象的API和对参数化查询的支持极大地提高了开发速度,代码维护和安全性。
以上是使用mysqli
编写的上述代码:
$data = array();
$data['content'] = "<p>This string has it's downsides</p>";
$data['date'] = 1271352514;
$json = json_encode($data);
$sqlInsert = $mysqli->prepare("INSERT INTO data VALUES (?);")
$sqlInsert->bind_param("s", $json);
$sqlInsert->execute();