Php JSON值未返回,但在echo上显示

Php JSON值未返回,但在echo上显示,php,mysql,json,Php,Mysql,Json,我正在开发一个小程序,它从一个表中提取数据,然后构建一个html表来显示它,并通过JSON返回该表。但是发生的情况是,该表返回null。然而,在循环结束时,我可以带上table变量,它将完整地显示构建的表。我没有收到任何错误,也找不到表将自行重置的区域。如果有人能帮我,那就太棒了。我的代码如下,很抱歉现在有点乱,我计划很快把它清理干净: <?php error_reporting(E_ALL); ini_set('display_errors', '1'); require_once '.

我正在开发一个小程序,它从一个表中提取数据,然后构建一个html表来显示它,并通过JSON返回该表。但是发生的情况是,该表返回null。然而,在循环结束时,我可以带上table变量,它将完整地显示构建的表。我没有收到任何错误,也找不到表将自行重置的区域。如果有人能帮我,那就太棒了。我的代码如下,很抱歉现在有点乱,我计划很快把它清理干净:

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
require_once '../../inc/config.php';
$response = array();
$response['table'] = "";
$table = "<thead>
        <tr>
            <th>Card Name</th>
            <th class='hidden-xs'>Card Number</th>
            <th class='hidden-xs'>Set</th>
            <th class='hidden-xs'>Rarity</th>
            <th class='hidden-xs text-center'>Market Avg.</th>
            <th class='hidden-xs text-center'>Change</th>
            <th class='hidden-xs text-center'>Sell Price</th>
            <th class='hidden-xs text-center'>Buy Price</th>
        </tr>
</thead>
<tbody>";
$cardname = $_REQUEST['card_name']; 

$set_id = $_REQUEST['set_name'];
$rarity = $_REQUEST['rarity'];
$where = "1=1";
$where .= !empty($cardname) ? " AND c.card_name LIKE :cardname" : "";
$where .= !empty($set_id) ? " AND c.setlist__id = :set_id" : "";
$where .= !empty($rarity) ? " AND c.ygo_rarity__id = :rarity" : "";
$q = "SELECT c.id, c.card_name, s.set_name, CONCAT_WS('-', s.set_abbr, c.card_number) as card_number, card_rarity, c.card_price, c.card_price_change, s.set_abbr, r.rarity_abbr FROM priceguide.cardlist c
    INNER JOIN priceguide.setlist s
    ON c.setlist__id = s.id
    INNER JOIN priceguide.ygo_rarity r
    ON c.card_rarity = r.rarity
    WHERE $where
    ORDER BY c.id ASC";

$stmt = $CONN->prepare($q);
$cardname = !empty($cardname) ? "%".$_REQUEST['card_name']."%" : "";
if(!empty($cardname)) $stmt->bindParam(":cardname", $cardname, PDO::PARAM_STR);
if(!empty($set_id)) $stmt->bindParam(":set_id", $set_id, PDO::PARAM_INT);
if(!empty($rarity)) $stmt->bindParam(":rarity", $rarity, PDO::PARAM_INT);
if($stmt->execute()){
    while($row = $stmt->fetch(PDO::FETCH_ASSOC)){

        $table.="<tr>";
            $card = htmlentities($row['card_name']);
            $table.="<td><a href='' data-imageSrc='".$row['set_abbr']."/".$row['card_number']."-".$row['rarity_abbr'].".png' class='card-view' data-cardid='".$row['id']."'>".htmlentities($row['card_name'])."</a></td>";
            $table.="<td class='hidden-xs'>".$row['card_number']."</td>";
            $table.="<td class='hidden-xs'>".$row['set_name']."</td>";
            $table.="<td class='hidden-xs'>".$row['card_rarity']."</td>";
            $table.="<td class='hidden-xs text-center'>$".number_format(floatval($row['card_price']), 2, '.', '')."</td>";
            $change = number_format(floatval($row['card_price_change']), 2, '.', '');
            if($change == 0.00){
                $change = "<font color='#FFCC00'><span class='glyphicon glyphicon-minus'></span></font>";
            }elseif($change < 0.00){
                $change = "<font color='#CC0000'><span class='glyphicon glyphicon-triangle-bottom'></span></font>\$$change";
            }else{
                $change = "<font color='#33CC00'><span class='glyphicon glyphicon-triangle-top'></span></font>\$$change";
            }
            $table.="<td class='hidden-xs text-center'>$change</td>";
            $sell = number_format(floorToFraction(floatval($row['card_price']), 4), 2, '.', '');
            $maxprice = (($sell - 1.93)-($sell*.10))/1.35;
            $maxprice = floorToFraction($maxprice, 4);
            $maxprice = $maxprice < 0 ? number_format(0, 2, '.', '') : number_format($maxprice, 2, '.', '');
            $table.="<td class='hidden-xs text-center'>\$$sell</td>";
            $table.="<td class='hidden-xs text-center'>\$$maxprice</td>";
        $table.="</tr>";
    }
    $table .= "</tbody>";

    $response['errors'] = false;
    $response['table'] = $table;    
}else{
    $response['errors'] = true;
    $response['message'] = "There was an error when searching the database, plesae contact the system administrator";
}

echo json_encode($response);
function floorToFraction($number, $denominator = 1){
    if($number >  1.00){
    $x = $number * $denominator;
    $x = ceil($x);
    $x = $x / $denominator;
    return $x;
}else{
    return $number;
    }
}
?>

这很可能是因为PHP中的json_encode()要求所有内容都是UTF8编码的。你可以试试

$response['table'] = utf8_encode($table);  

我看不到任何其他可能需要编码的内容。

这里的所有内容都是UTF8编码的吗?我刚刚走进了那个解决方案。因此,接下来的问题是,我应该在每一行出现时对其进行utf-8编码,还是这是一种不好的做法?我过去只需要将我想要进行json编码的整个大字符串一次性转换为UTF8。这对我来说很有用。如果你想把这个作为答案,我会检查它是否有效,如果有效,我会接受。很高兴帮助你,谢谢你的提示!