看来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非常挑剔吗?


相反,它相当轻松!

10-04 21:59
查看更多