JSON 仅作为一个值出现
Posted
技术标签:
【中文标题】JSON 仅作为一个值出现【英文标题】:JSON comes out as only one value 【发布时间】:2021-05-05 19:21:03 【问题描述】:我正在尝试将一些设置保存到我的 SQL 数据库中并使用 ajax 和 php 恢复它们。 但结果只有一个长 JSON 值而不是 3。所以我无法访问“setting1”例如。
Settings: ""setting1":"true","setting2":"false","setting3":"10""
这是我的保存方法。 变量都设置好了。
let newSettings =
"setting1": setting1_value,
"setting2": setting2_value,
"setting3": setting3_value
;
newSettings = JSON.stringify(newSettings);
var xhttp = new XMLHttpRequest();
xhttp.open("POST", "save-settings.php");
xhttp.setRequestHeader("Content-Type", "application/json");
xhttp.onreadystatechange = function ()
if (this.readyState == 4 && this.status == 200)
console.log(this.responseText);
;
xhttp.send(newSettings);
这是保存设置的php脚本。
include "connection.php"
$newSettings = file_get_contents("php://input");
$object = json_decode($newSettings, true);
$sql = "UPDATE mytable SET Settings = '$newSettings'";
$result = $connect->query($sql);
并且这个方法应该从 SQL 中读取设置。
include "connection.php";
$sql = "SELECT Settings FROM Leads_Zugriff WHERE atpid = 21001";
$result = $connect->query($sql);
if ($result->num_rows > 0)
while ($row = $result->fetch_assoc())
print(json_encode($row, true));
这会调用读取设置的 php 脚本
function readSettings()
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function ()
if (this.readyState == 4 && this.status == 200)
myObj = JSON.parse(this.responseText);
console.log(myObj);
;
xhttp.open("GET", "read-settings.php");
xhttp.send();
【问题讨论】:
警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDO 或mysqli 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data。 Escaping is not enough! 【参考方案1】:这一行在这里
$row = $result->fetch_assoc()
顾名思义,返回一个关联数组。
而且您正在将结果转换为 JSON,这就是您得到的原因
Settings: ""setting1":"true","setting2":"false","setting3":"10""
尝试改变这一行:
print(json_encode($row, true));
进入
print($row['Settings'], true);
【讨论】:
【参考方案2】:您将$newSettings
直接保存到数据库中。 $newSettings
是一个 JSON 字符串。然后,你再把它拿出来,你在上面运行json_encode
,它把它重新编码为JSON。所以你最终会得到双重编码的数据。
如果您要将原始 JSON 存储在数据库中,则无需在将其返回给浏览器之前再次对其进行编码。
【讨论】:
以上是关于JSON 仅作为一个值出现的主要内容,如果未能解决你的问题,请参考以下文章
Phpmyadmin 仅接受来自具有多个输入值的 json 数组中的一个条目