我有一个JSON对象,我使用JavaScript中的JSON.stringify()方法将其转换为JSON字符串。然后,我使用AJAX PHP将其插入到数据库中,并将其发送到PHP文件。
$("#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字符串存储在数据库中,而不使它们失效。
干杯!
发布于 2018-06-09 04:44:11
使用参数化查询,而不是将变量替换到字符串中。
$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()
这样的函数试图转义它们。
发布于 2018-06-09 05:48:54
总是有可能治好逃脱的食客。我发现当我存储JSON字符串时,我不可避免地会在以后处理同样的问题。因为我从来不在SQL中搜索存储的对象,所以我通常只将它们转换为base64。所以:
btoa(JSON.stringify(place[0]))
遗憾的是,一些base64字符会导致URL、文件名等出现问题,所以我实际上对URL使用了修改后的base64。
function safeobj(ob) {
return btoa(JSON.stringify(ob)).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, ".");
}
这几乎可以毫发无损地通过任何事情。对我来说,值得花一点额外的存储来避免不断地处理这些不同的问题。
如果您支持IE9-,则需要为btoa使用填充程序或polyfill。
https://stackoverflow.com/questions/50768044
复制相似问题