2

我在将 JSON 插入数据库时​​遇到问题,我的意图是获取变量,对它们进行 json_encode,删除斜杠(来自 magic_quotes),然后添加斜杠以转义 {"key":"value"} 中的引号

不幸的是,编码字符串上的 strip_slashes 没有做任何事情,并输出这个

{"content":"<p>This string has it\'s downsides</p>","date":1271352514}

然后我尝试了addlashes和mysql_real_escape_string,两者都输出

"{\\"content\\":\\"<p>This string has it\\\'s downsides</p>\\",\\"date\\":1271352514}"

我不明白为什么要添加两个斜杠?我正在为此撕扯我的头发,每次我尝试使用stripslashes时都会留下一个,添加斜线会增加两个。任何帮助将不胜感激!

4

2 回答 2

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).'"';

如果您启用了魔术引号,您应该在该步骤之前禁用或删除它们,以便您的$json字符串实际上只是有效的 JSON。

于 2010-04-15T17:40:41.133 回答
0

首先,您应该真正考虑magic_quotes关闭...引用手册

警告

自 PHP 5.3.0 起,此功能已被弃用。强烈建议不要依赖此功能。


话虽如此,用于json_encode()构建您的 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();
于 2010-04-15T17:43:09.360 回答