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
相关产品推荐
相关产品推荐

