You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chart.js结合MySQL无法展示全部美国州人口数据问题求助

解决Chart.js仅显示最后一条州人口数据的问题

嘿,别担心,新手遇到这种问题太正常啦!我看了你的代码,马上就发现问题所在了——你在循环数据库结果的时候,是直接覆盖变量而不是把数据累加到列表里,所以最后只有Wyoming那条数据留下来了。

问题根源

你当前的循环逻辑是每次都用新数据替换变量值,而不是追加:

// 错误写法:每次循环都会覆盖之前的内容
$states = '"' . $row["state"] . '",';
$p2019 = '"' . $row["pop2019"] . '",';

这样循环结束后,变量里只会保留最后一行的记录。

修正方案

1. 修改PHP循环逻辑,拼接所有数据

把变量赋值改成追加模式(用.=代替=),最后再去掉末尾多余的逗号,避免Chart.js解析报错:

<?php 
include("conn.php"); 
$query = "SELECT * FROM usa_pop2"; 
$result = $conn->query($query); 
if (!$result) { 
    echo $conn->error; 
    exit(); 
} 
?>
<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> 
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> 
    <title>Charts</title> 
</head> 
<body> 
<?php 
// 初始化空字符串,用来拼接所有数据
$states = ""; 
$p2018 = ""; 
$p2019 = ""; 
$p2020 = ""; 

while ($row = $result->fetch_assoc()) { 
    // 使用 .= 追加内容,而不是覆盖
    $states .= '"' . $row["state"] . '",'; 
    $p2018 .= '"' . $row["pop2018"] . '",'; 
    $p2019 .= '"' . $row["pop2019"] . '",'; 
    $p2020 .= '"' . $row["pop2020"] . '",'; 
    echo "<p> $states - $p2018</p>"; 
} 

// 去掉末尾多余的逗号,避免Chart.js解析错误
$states = rtrim($states, ',');
$p2019 = rtrim($p2019, ',');
?> 
<div class="container"> 
    <h2>my data</h2> 
</div> 
<div class="container"> 
    <canvas id="myChart"></canvas> 
</div> 
<script> 
let myChart = document.getElementById('myChart').getContext('2d'); 

let popChart = new Chart(myChart, { 
    type: 'bar', 
    data: { 
        labels: [<?php echo $states; ?>], 
        datasets: [{ 
            label: 'Population 2019', 
            data: [<?php echo $p2019; ?>], 
            backgroundColor: '#581845', 
            borderWidth: 1, 
            hoverBorderWidth: 3, 
            hoverBorderColor: '#000' 
        }] 
    }, 
    options: { 
        // Chart.js 3.x版本中y轴写法改为scales.y,不再是yAxes
        scales: { 
            y: { 
                ticks: { 
                    beginAtZero: true 
                } 
            } 
        }, 
        tooltips: { 
            callbacks: { 
                label: function(tooltipItem) { 
                    return "€" + Number(tooltipItem.yLabel); 
                } 
            } 
        }, 
    } 
}); 
</script> 
</body> 
</html>

2. 额外调整:Chart.js版本兼容

你的代码里引用了Chart.js 3.x,但配置里还是用了旧版本的yAxes写法,我已经改成了3.x的scales.y,避免控制台报错。

这样修改之后,你的柱状图应该就能显示所有州的2019年人口数据啦!如果还有其他问题,随时提问~

内容的提问来源于stack exchange,提问作者Murfs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 13:22:34