我有一个 JSON 对象,我已使用 JavaScript 中的 JSON.stringify() 方法将其转换为 JSON 字符串。然后,我使用 AJAX 发布到 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 字符串存储在数据库中而不会使它们失效。
干杯!
最佳答案
使用参数化查询而不是将变量替换到字符串中。
$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()
这样的函数来尝试转义它们。
关于javascript - 上传到数据库时,反斜杠将从 JSON 字符串中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50768044/