【问题标题】:Is it normal for echo json_encode to return the last valueecho json_encode 返回最后一个值是否正常
【发布时间】:2018-03-10 16:01:30
【问题描述】:
<?php

require_once("Connection.php");

class DisplayJsonData{

    function getAllJsonData(){

        $connection = new Connection();
        $conn = $connection->getConnection();

        $jsonData = array();


        try{

            $sqlQuery = "SELECT * FROM DataTable";
            $getJson = mysqli_query($conn,$sqlQuery);


            while($row = mysqli_fetch_assoc($getJson)){

                $jsonData = $row;

            }


        }catch (Exception $e){
            echo "Error while displaying json : " . $e->getMessage();
        }
        if($sqlQuery){
            echo json_encode(array("DATA"=>$jsonData));
        }else{
            echo json_encode(array("DATA"=>null));
        }
    }
}

$json = new DisplayJsonData();
$json->getAllJsonData();

?>

这是我的工作代码,我想得到确认,

echo json_encode(array("DATA"=>$jsonData));

这一行正在返回数组列表中最后一个值的一个值,但我在数据库中有 8 条记录,现在它是否返回所有值但我看不到它们,因为我只写了数组的名称但我没有循环在里面,这是怎么回事,还是真的写了 1 条记录。

【问题讨论】:

  • 您只是在使用 while 循环更新 $jsonData 的值。因此,最后一个 $row 将是 $jsonData 的值。您应该将 $row 推送到 $jsonData。
  • 另外,你可以试试: $jsonData = mysqli_fetch_all($getJson, MYSQLI_ASSOC);没有 WHILE 循环。参考:php.net/manual/en/mysqli-result.fetch-all.php
  • 您的测试 if($sqlQuery){ 将始终通过,因为这是查询字符串,而不是如果查询正确执行。
  • 另外作为风格问题 - 我通常会 return 来自函数的数据并从调用点输出。 echo 自己的数据的函数有时会导致不必要的副作用。
  • @Nigel Ren 我实际上是在尝试将它从主机发送到我的 android 设备,所以现在看起来漂亮不是我关心的问题,更不用说让它可读了我可以使用 echo json_encode(array("DATA"=&gt;$jsonData),JSON_PRETTY_PRINT); 我可以添加JSON_PRETTY_PRINT 使其可读。

标签: php arrays json database mysqli


【解决方案1】:

您的代码已覆盖$jsonData 变量,因此您所看到的只是添加到该变量的最后一行。将[] 添加到数组名称中,每次循环时,您都会向数组添加一个新的事件。

试试这个

$jsonData=array();
while($row =mysqli_fetch_assoc($getJson)){
    $jsonData[] = $row;
}

【讨论】:

  • OP 为什么要试试这个好的答案将始终解释所做的事情以及这样做的原因,不仅适用于 OP,而且适用于可能会发现此问题并正在阅读您的答案的 SO 的未来访问者。跨度>
  • @RiggsFolly 你有理由,对不起,我看到这就像一个“简单的错误”,在我的下一个答案中我会解释得更好。
【解决方案2】:

不,json_encode 返回最后一个值是不正常的。您对变量 $jsonData 有问题,它应该是一个数组,并且在每次循环迭代时 $row 必须附加/推送到该 $jsonData 数组。使用此行$jsonData = $row;,您将覆盖每一行值,因此在将其编码为 json 的情况下,只有最后一行可用。

while($row = mysqli_fetch_assoc($getJson)){
       $jsonData[] = $row;  //see the extra []
}

所以现在如果你像这样回显你的数据,你应该可以完美地得到 8 行。

 echo json_encode(array("DATA"=>$jsonData));

【讨论】:

    猜你喜欢
    • 2013-06-06
    • 1970-01-01
    • 2022-07-13
    • 2017-02-09
    • 2021-07-12
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多