看来json_encode对我的PHP文件中可能包含的其他内容非常挑剔。很好,因为我只是按照我通常在文件A(带有json_encode)中的操作进行操作。
我只是想问一下,因为我在$ _SESSION中存储了一个变量,而不是用该变量更新数据库,因为当我在文件中包含所有代码时,json_encode似乎并不想工作。
例如,此代码不起作用:
<?php
session_start();
include 'dbcon.php';
$sessionID = uniqid();
echo json_encode($sessionID);
if(isSet($_POST['clearSession']) == '1')
{
$query = "UPDATE currentID SET id=('0')";
$execute = $mysqli->query($query) or die($mysqli->error.__LINE__);
} else {
$query = "UPDATE currentID SET id=('$sessionID')";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);
}
?>
在浏览器中转到文件时,实际上确实得到了json_encode结果,但是当我的Javascript调用它时,似乎无法正确导入它。
因此,目前我只拥有两个PHP文件:
<?php
session_start();
$sessionID = uniqid();
$_SESSION["sessionID"] = $sessionID;
echo json_encode($sessionID);
?>
哪个回声与第一个文件中的回声相同,但是这次我的JavaScript正确导入了它。
和
<?php
session_start();
include 'dbcon.php';
if(isSet($_POST['clearSession']) == '1')
{
$query = "UPDATE currentID SET id=('0')";
$execute = $mysqli->query($query) or die($mysqli->error.__LINE__);
} else {
$sessionID = $_SESSION["sessionID"];
$query = "UPDATE currentID SET id=('$sessionID')";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);
}
?>
我想我的问题是,为什么会这样?我不得不将uniqid存储在SESSION中,这样我的其他PHP文件可以将其添加到数据库中似乎有点愚蠢。而如果我只是将其存储在一个文件中,那么我可以在生成新的uniqid时更新数据库,而不必首先使用$ _SESSION。
最佳答案
你有这个:
$sessionID = uniqid();
echo json_encode($sessionID); // "53d4c17abfe87"
由于
uniqid()
生成纯字符串,因此根据format specification,您的输出不是有效的JSON。您将需要以下内容:$sessionID = uniqid();
echo json_encode(array($sessionID)); // ["53d4c17abfe87"]
为什么
json_encode()
首先会生成无效的JSON?因为有时生成部分JSON很有用。例如,将值注入到生成的JavaScript代码中是一个方便的技巧:var foo = <?=json_encode($sessionID)?>;
它也是documented:
PHP实现了JSON的超集-它还将进行编码和解码
标量类型和NULL。 JSON标准仅支持这些值
当它们嵌套在数组或对象中时。
因此,回答问题标题:
json_encode非常挑剔吗?
相反,它相当轻松!