首页 > 解决方案 > 如何用多行编码json?

问题描述

在开始之前,我查看了多个平台上的其他示例和问答,但似乎都没有解决我的问题。我正在尝试通过 json 从 MySQL 返回多行。然而,我一直做不到。下面的代码显示了我的尝试。

我通过 Postman 收到回复。第一个while仅返回数据库中的最后一个条目,并do-while返回所有条目但未正确编码 json,因为 json 输出syntax error但 html 部分显示所有条目。

<?php
    $dashboard_content_token = $_REQUEST["dashboard_content_token"];
    $token = "g4";

    require(cc_scripts/connect.php);

    $sql = "SELECT * FROM `dashboard_content`";
    $check = strcmp("$token", "$dashboard_content_token");
    $statement = mysqli_query($con, $sql);
    if (check) {
        $rows = mysqli_fetch_assoc($statement);
        if (!$rows) {
            echo "No results!";
        } else {
              while ($rows = mysqli_fetch_assoc($statement)) {
                $news_id = $rows['news_id'];
                $image_url = $rows['image_url'];
                $news_title = $rows['news_title'];
                $news_description = $rows['news_description'];
                $news_article = $rows['news_article'];

                $result['dashboard content: '][] = array('news_id' => $news_id, 'image_url' => $image_url, 'news_title' => $news_title, 'news_description' => $news_description, 'news_article' => $news_article); 

                echo json_encode($result);
        }
        // do {
                // $news_id = $rows['news_id'];
                // $image_url = $rows['image_url'];
                // $news_title = $rows['news_title'];
                // $news_description = $rows['news_description'];
                // $news_article = $rows['news_article'];

                // $result['dashboard content: '][] = array('news_id' => $news_id, 'image_url' => $image_url, 'news_title' => $news_title, 'news_description' => $news_description, 'news_article' => $news_article); 

                // echo json_encode($result);
        //     } while ($rows = mysqli_fetch_assoc($statement));


        mysqli_free_result($statement);
    }
}
?>

标签: phpjson

解决方案


这应该有效。您需要使用该do...while语句,否则会跳过第一个结果。

<?php
    $dashboard_content_token = $_REQUEST["dashboard_content_token"];
    $token = "g4";

    require(cc_scripts/connect.php);

    $sql = "SELECT * FROM `dashboard_content`";
    $check = strcmp("$token", "$dashboard_content_token");
    $statement = mysqli_query($con, $sql);
    if (check) {
        $rows = mysqli_fetch_assoc($statement);
        if (!$rows) {
            echo "No results!";
        } else {

          do {
             $news_id = $rows['news_id'];
             $image_url = $rows['image_url'];
             $news_title = $rows['news_title'];
             $news_description = $rows['news_description'];
             $news_article = $rows['news_article'];

               $result['dashboard content: '][] = array('news_id' => $news_id, 'image_url' => $image_url, 'news_title' => $news_title, 'news_description' => $news_description, 'news_article' => $news_article); 


          } while ($rows = mysqli_fetch_assoc($statement));

        mysqli_free_result($statement);
        echo json_encode($result);
    }
}
?>

关键是将所有结果放入一个数组中,然后只做一个json_encode()。当您json_encode()多次调用时,您的 API 将返回无效的 json。


推荐阅读