我现在已经在这个问题上停留了很长时间。我看了很多,但我似乎无法找到答案。请参阅以下链接,以获取有关Google开发人员的参考信息。
https://developers.google.com/chart/interactive/docs/reference#dataparam
我有这个PHP脚本从我的数据库中提取数据然后构建JSON。
我的代码如下:
<?php
header('content-type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin:*');//Include this header to make the requests cross-origin
include 'dbconnect.php';//File for database connection
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
//Check if query GET parameters are defined
if(isset($_GET['date1']) && isset($_GET['date2'])){
$parm1=$_GET['date1'];
$parm2=$_GET['date2'];
//We build the metadata node of our json object with chart info / update time / chart title
//date_default_timezone_set('Etc/GMT+8');
//$date = date('Y-m-d H:i:s');
//$array['meta'][]=array('title'=>'Sales data for year'.$parm1.'-'.$parm2);
//$array['meta'][]=array('LastUpdated'=>$date);
//$array['meta'][]=array('Info'=>'This chart displays sales data on an annual basis');
$array['data']['cols'][]=array('label'=>'2008','type' => 'number');
$array['data']['cols'][]=array('label'=>'2009','type' => 'number');
}else{
echo "No data available";
}
$sql = "CALL TEST('$parm1','$parm2');";
//We run the query, store all rows in an associative array, then json_encode it
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
$i = 0;
while($row = $result->fetch_row()) {
$array['data']['rows'][]= array(
'c' => array(
array('v'=>intval($row[$i]))
));
echo $row[1];
$i++;
}
}else {
echo "0 results";
}
//unset($array['data']['rows'][0]);
echo $_GET['callback'].'('.json_encode($array).')';
$conn->close();//We close the database connection here
?>
这个php脚本的json输出如下:
{
data: {
cols: [{
label: "2008",
type: "number"
}, {
label: "2009",
type: "number"
}],
rows: [{
c: [{
v: 3016207
}]
}]
}
}
我的第一个问题是,在c
节点中,只应添加一个值,而应该有两个v:{object}
。接受的格式afaik应该在我的特定情况下,v:{object}
嵌套了两个c:[array]
。我有一种强烈的感觉,json_encode()
未能建立一个复杂的JSON,但我在过去投入了更多更强硬的东西并且它起作用了。谁能帮我 ?请:o
编辑:预期的json格式为:
{
data: {
cols: [{
label: "2008",
type: "number"
}, {
label: "2009",
type: "number"
}],
rows: [{
c: [{v: 3016207 },{v: 3000528}]
}]
}
}
我的查询正在返回:
+---------+---------+
| 2008 | 2009 |
+---------+---------+
| 3016207 | 3000528 |
+---------+---------+
所以基本上没有插入第二列的值:/
答案 0 :(得分:1)
应该解雇那些提出JSON格式的人。看起来有人试图让事情变得困难。
但是,如果您了解数据库函数返回值是什么以及如何操作这些数组,那么生成并不难。例如:您在结果集上循环,即使它总是有一行,但您没有循环遍历列。然后,您尝试使用单个值c
填充$row[$i]
元素,并想知道为什么它只是一个值。 (我怀疑你可能误解了$var[]
结构是如何工作的。)如果你想在这方面取得成功,请阅读这些功能。顺便说一下,你仍然容易受到SQL注入攻击。
无论如何,这显然是未经测试的,但至少应该让你开始。
$sql = "CALL TEST('$parm1','$parm2')";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
foreach ($row as $name=>$val) {
$array['data']['cols'][] = array('label'=>$name, 'type'=>'number');
$c[] = array("v"=>$val);
}
$array['data']['rows'] = array(array('c'=>$c));
} else {
echo "0 results";
}