首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >上载到DB时,反斜杠将从JSON字符串中删除

上载到DB时,反斜杠将从JSON字符串中删除
EN

Stack Overflow用户
提问于 2018-06-09 04:34:23
回答 2查看 384关注 0票数 0

我有一个JSON对象,我使用JavaScript中的JSON.stringify()方法将其转换为JSON字符串。然后,我使用AJAX PHP将其插入到数据库中,并将其发送到PHP文件。

代码语言:javascript
复制
     $("#saveToDatabase").click(function(){
   var place = searchBox.getPlaces();
   var locationJson = JSON.stringify(place[0]);

   $.ajax({
    type: "POST",
    url: "insertLocation.php",
    dataType:"json",
    ContentType:"application/json",
    data:  {
      locationJson : locationJson
  },
    cache: false,
    success: function(result){
     window.alert("successful upload!");
    }});
  });
}

    <?php
require_once("connection.php");



if(isset($_POST["locationJson"])){

    $locationJson = $_POST['locationJson'];

$query ="INSERT INTO Locations (json) VALUES ('$locationJson')";
        $statement = $pdo ->prepare($query);
        $statement->execute();

}

?>

我遇到的问题是,在上传数据时,反斜杠"\“会从我的JSON字符串中删除。因此,当我从数据库中选择它们并尝试在JavaScript中再次操作它们时,它们不再是有效的JSON对象。

我正在使用SQL上传到PHPmyAdmin。

有谁知道解决这个问题的方法吗?我需要将我的JSON字符串存储在数据库中,而不使它们失效。

干杯!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-09 04:44:11

使用参数化查询,而不是将变量替换到字符串中。

代码语言:javascript
复制
$query ="INSERT INTO Locations (json) VALUES (:json)";
$statement = $pdo ->prepare($query);
$statement->bindParam(':json', $locationJson);
$statement->execute();

请参阅How can I prevent SQL injection in PHP?,了解为什么将变量替换为SQL查询不是一个好主意,即使您使用像addslashes()这样的函数试图转义它们。

票数 2
EN

Stack Overflow用户

发布于 2018-06-09 05:48:54

总是有可能治好逃脱的食客。我发现当我存储JSON字符串时,我不可避免地会在以后处理同样的问题。因为我从来不在SQL中搜索存储的对象,所以我通常只将它们转换为base64。所以:

代码语言:javascript
复制
btoa(JSON.stringify(place[0]))

遗憾的是,一些base64字符会导致URL、文件名等出现问题,所以我实际上对URL使用了修改后的base64。

代码语言:javascript
复制
function safeobj(ob) {
    return btoa(JSON.stringify(ob)).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, ".");
}

这几乎可以毫发无损地通过任何事情。对我来说,值得花一点额外的存储来避免不断地处理这些不同的问题。

如果您支持IE9-,则需要为btoa使用填充程序或polyfill。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50768044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档