php - 为什么这段代码给我重复的结果?

标签 php mysql json

这可能真的很简单,之后我可能会踢自己的屁股,但我有以下代码,它显示表中数据的 html 或 json 并返回它。

<?php
session_start();
$base = dirname(dirname(__FILE__));
include($base."/include/db.php");

global $conn;
$trees = [];
$treeBoxes = [];
if(isset($_SESSION['clientId'])) {
    $clientId = $_SESSION['clientId'];
    $query = $conn->prepare("SELECT * FROM ct_trees WHERE client_id=?");
    $query->bind_param('i', $clientId);
    $query->execute();
    $result = $query->get_result();
    if($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            $tree_id = $row['id'];
            $tree_name = $row['name'];
            $query = $conn->prepare("SELECT id FROM ct_connections WHERE tree_id=?");
            $query->bind_param('i', $tree_id);
            $query->execute();
            $result2 = $query->get_result();
            $connections = $result2->num_rows;
            array_push($treeBoxes, '<span class="checkbox abc-checkbox abc-checkbox-success">',
            '<input id="tree'.$tree_id.'" type="checkbox" rel="'.$tree_id.'">',
            '<label for="tree'.$tree_id.'">'.$tree_name.'</label>',
            '</span>');
            array_push($trees, ["id" => $tree_id, "name" => $tree_name, "connections" => $connections]);
            if(isset($_GET['json'])) {
                echo json_encode($trees);
            } else {
                echo join("", $treeBoxes);
            }
        }
    }
}
?>

现在假设我们想要 json 结果,我得到以下字符串:

[{"id":1,"name":"My Tree","connections":4360}][{"id":1,"name":"My Tree","connections":4360},{"id":4,"name":"Another Tree","connections":0}]

现在由于某种原因,它给我一个数组中的第一个结果,然后是相同的结果,但与其他行一起在一个单独的数组中。

最佳答案

修复了它,我知道这很愚蠢:

<?php
session_start();
$base = dirname(dirname(__FILE__));
include($base."/include/db.php");

global $conn;
$trees = [];
$treeBoxes = [];
if(isset($_SESSION['clientId'])) {
    $clientId = $_SESSION['clientId'];
    $query = $conn->prepare("SELECT * FROM ct_trees WHERE client_id=?");
    $query->bind_param('i', $clientId);
    $query->execute();
    $result = $query->get_result();
    if($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            $tree_id = $row['id'];
            $tree_name = $row['name'];
            $query = $conn->prepare("SELECT id FROM ct_connections WHERE tree_id=?");
            $query->bind_param('i', $tree_id);
            $query->execute();
            $result2 = $query->get_result();
            $connections = $result2->num_rows;
            array_push($treeBoxes, '<span class="checkbox abc-checkbox abc-checkbox-success">',
                '<input id="tree'.$tree_id.'" type="checkbox" rel="'.$tree_id.'">',
                '<label for="tree'.$tree_id.'">'.$tree_name.'</label>',
                '</span>');
            array_push($trees, ["id" => $tree_id, "name" => $tree_name, "connections" => $connections]);
        }
        //Moved echo outside of while loop.
        if(isset($_GET['json'])) {
            echo json_encode($trees);
        } else {
            echo join("", $treeBoxes);
        }
    }
}
?>

关于php - 为什么这段代码给我重复的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41140055/

相关文章:

php - 如何关闭 postgres 中的多个语句?

java - 如何在 JSONObject 中获取没有名称的 JSONArrays

java - 如何在运行时将 Java Enum 转换为 Json?

ios - 将嵌套的 JSON 解析为 NSDictionary

php - 过滤搜索结果的分页

php - 页面刷新后自动激活Bootstrap模式

php - symfony2 空 jsonResponse

php - guzzlephp(或 php-ga-measurement-protocol)中的异步请求

MYSQL 子选择不工作

php - 选择最后一对不同的