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

Google Charts读取MySQL数据报错:轴#0数据列不能为字符串类型

Google Charts 报错 Data column(s) for axis #0 cannot be of type string 排查

报错核心原因是生成的前端JS数据结构被破坏,具体有两处错误:

错误1:调试输出直接插入了图表数据数组

你在判断数据库查询成功的逻辑里,直接在arrayToDataTable的参数数组内部输出了调试文本:

if($result){
    echo "CONNECTED TO CLOUD PRU DATABASE<br>";
}

这段文本会被直接拼接到JS代码里,最终生成的JS结构如下:

var data = google.visualization.arrayToDataTable([
    ['Year1', 'CountGiardiaPos', 'CountCryptoPos'],
    CONNECTED TO CLOUD PRU DATABASE<br>
    ['2003', 0, 207],
    // 其余数据行
]);

这段不属于数组元素的文本直接破坏了JS语法,导致图表库解析数据时列类型识别完全错位,直接触发类型错误。如果要保留这个连接成功提示,必须放到JS代码块外面,不能插在传给图表的参数里。

错误2:完整代码中年份值输出缺少引号包裹

你单独测试数据输出时,给年份字段加了单引号包裹,输出格式是['2003', 0, 207],但完整代码里的循环输出漏了这层引号:

// 完整代码里的错误写法
echo "[".$row[Year1].", ".$row[CountGiardiaPos].", ".$row[CountCryptoPos]."],";

// 单独测试时的正确写法
echo "['".$row[Year1]."', ".$row[CountGiardiaPos].", ".$row[CountCryptoPos]."],";

这个问题会让年份值以裸数字形式输出,和前面的语法错误叠加后,会进一步加剧数据解析异常。另外你代码里写的$row[Year1]没有给数组键加单引号,PHP会把Year1当成常量解析,建议补上引号写成$row['Year1']避免警告。

修复方式

  • 删除JS数组内部的调试输出语句,调试信息移到页面其他非脚本位置。
  • 把循环输出数据的逻辑改成你单独测试时的正确写法,给年份值补上单引号。
  • 建议先把所有数据行存到PHP数组,最后用implode拼接,避免循环输出末尾多一个逗号导致JS语法错误。

修复后的PHP数据输出部分参考:

<?php
$result = mysqli_query($connection, "SELECT * FROM sqlAnnualPositives2");
$dataRows = [];
if ($result->num_rows > 0) {
    while($row = $result->fetch_array()) {
        $dataRows[] = "['".$row['Year1']."', ".intval($row['CountGiardiaPos']).", ".intval($row['CountCryptoPos'])."]";
    }
}
echo implode(',', $dataRows);
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:39:35