添加斜杠,mysql_real_escape总是添加两个斜杠?

时间:2010-04-15 17:36:02

标签: php addslashes

我遇到了将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}"

我无法理解为什么它会添加两个斜杠?而且我正在撕掉我的头发,每当我尝试将它留下的条纹,并添加斜线添加两个。任何帮助都将非常感激!

2 个答案:

答案 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();