[英]Google Charts datetime issue, not displaying JSON data now
基本上,當我嘗試生成此Google圖表時,我的select語句似乎不起作用。 下面的echo語句不輸出任何內容,就像沒有選擇一樣。 我已經凝視了足夠長的時間,以至於我知道錯誤在那里,但現在還看不到它。 最初我遇到一個問題,即我只能將帶有時間戳的數據作為字符串進行處理,但是由於實現了下面的代碼,因此好像什么也沒選擇。 我沒有收到任何錯誤,但是當我回顯JSON數據和查詢時,JSON數據行為空,SQL查詢的格式正確。
這就是我用echo語句得到的結果:
{"cols":[{"id":"Date","label":"Date","type":"datetime"},{"id":"Usage","label":"Usage","type":"number"}],"rows":[]} SELECT DATE(`dateRead`) as day, SUM(Ch3)*0.008 as totals FROM SNdata WHERE (dateRead >= 2012-01-01 AND dateRead <= 2012-01-15) and sn=5018 GROUP BY day
代碼在下面,以及數據庫創建代碼和一些示例數據。
謝謝。
有人可以看到這是怎么回事嗎? 我可能只是太累了,看不到這里出了什么問題。 我真的可以朝正確的方向輕推。
另外,請記住,此應用程序每次都將脫機運行,而我對SQL注入的擔憂為零。
<?php
$serialNum = '5018';
$Chan = '3';
$Mult = '0.008';
$startDate = '2012-01-01';
$endDate ='2012-01-15';
$con=mysql_connect("localhost","user","password") or die("Failed to connect with database!!!!");
mysql_select_db("mydb", $con);
$selectSQL="SELECT
DATE(`dateRead`) as day,
SUM(Ch$Chan)*$Mult as totals
FROM SNdata
WHERE (dateRead >= $startDate AND dateRead <= $endDate) AND sn=$serialNum
GROUP BY day";
$sth = mysql_query($selectSQL);
$data = array (
'cols' => array(
array('id' => 'Date', 'label' => 'Date', 'type' => 'datetime'),
array('id' => 'Usage', 'label' => 'Usage', 'type' => 'number')
),
'rows' => array()
);
while ($res = mysql_fetch_assoc($sth)) {
// assumes dates are patterned 'yyyy-MM-dd hh:mm:ss'
preg_match('/(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})/', $res['day'], $match);
$year = (int) $match[1];
$month = (int) $match[2] - 1; // convert to zero-index to match javascript's dates
$day = (int) $match[3];
$hours = (int) $match[4];
$minutes = (int) $match[5];
$seconds = (int) $match[6];
array_push($data['rows'], array('c' => array(
array('v' => "Date($year, $month, $day, $hours, $minutes, $seconds)"),
array('v' => $res['totals'])
)));
}
echo json_encode($data, JSON_NUMERIC_CHECK);
echo $selectSQL;
?>
<html>
<head>
<!--Load the Ajax API-->
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
// Load the Visualization API and the chart package.
google.load('visualization', '1', {'packages':['corechart']});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = new google.visualization.DataTable(<?php echo json_encode($data); ?>);
var options = {
title: 'I am a potato',
hAxis: {
title: 'Date',
},
vAxis: {
title: 'Useage',
}
};
var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
</script>
</head>
<body>
<div id="chart_div"></div>
</body>
</html>
這是建立數據庫的方式
CREATE TABLE `SNdata` (
`SN` INT(10) UNSIGNED NULL DEFAULT '0',
`dateRead` DATETIME NULL DEFAULT NULL,
`Ch1` MEDIUMINT(8) UNSIGNED NULL DEFAULT '0',
`Ch2` MEDIUMINT(8) UNSIGNED NULL DEFAULT '0',
`Ch3` MEDIUMINT(8) UNSIGNED NULL DEFAULT '0',
`Ch4` MEDIUMINT(8) UNSIGNED NULL DEFAULT '0',
`Ch5` MEDIUMINT(8) UNSIGNED NULL DEFAULT '0',
`Ch6` MEDIUMINT(8) UNSIGNED NULL DEFAULT '0',
`Ch7` MEDIUMINT(8) UNSIGNED NULL DEFAULT '0',
`Ch8` MEDIUMINT(8) UNSIGNED NULL DEFAULT '0',
INDEX `DateINX` (`dateRead`),
INDEX `SNINX` (`SN`)
)
COLLATE='latin1_swedish_ci'
ENGINE=MyISAM;
這是一個如何建立數據庫的例子
5018,01/01/2012 00:15,0,77,73,84,0,0,3,62
5018,01/01/2012 00:30,0,100,45,77,0,0,3,67
5018,01/01/2012 00:45,0,96,62,73,0,0,2,61
5018,01/01/2012 01:00,0,81,79,85,0,0,3,56
5018,01/01/2012 01:15,0,79,47,73,0,0,2,45
5018,01/01/2012 01:30,0,72,54,69,0,0,3,65
5018,01/01/2012 01:45,0,121,100,77,0,0,3,61
5018,01/01/2012 02:00,0,77,52,87,0,0,2,61
5018,01/01/2012 02:15,0,100,99,87,0,0,3,61
5018,01/01/2012 02:30,0,87,110,107,0,0,2,60
5018,01/01/2012 02:45,0,91,86,79,0,0,3,69
5018,01/01/2012 03:00,0,91,75,67,0,0,3,61
5018,01/01/2012 03:15,0,93,99,77,0,0,2,66
5018,01/01/2012 03:30,0,87,97,72,0,0,3,64
5018,01/01/2012 03:45,0,89,73,80,0,0,3,55
5018,01/01/2012 04:00,0,92,80,69,0,0,2,46
5018,01/01/2012 04:15,0,83,94,84,0,0,3,54
5018,01/01/2012 04:30,0,99,81,66,0,0,2,67
5018,01/01/2012 04:45,0,77,89,65,0,0,3,60
5018,01/01/2012 05:00,0,85,85,79,0,0,3,
您的SQL從根本上被破壞了。 您正在將日期值直接插入查詢中而不引用:
WHERE (dateRead >= $startDate AND dateRead <= $endDate) ...
變成
WHERE (dateRead >= 2012-01-11 AND dateRead <= 2012-01-15) ...
由於它們沒有被引用,所以它們只是算術表達式:您正在執行SUBTRACTION,而不是日期,因此您可以有效地運行
WHERE (dateRead >= 2011 AND dateRead <= 1996)
您的查詢不會返回任何內容,因為沒有匹配項。
您不應該再使用mysql _ *()函數,並且您不應該直接將值轉儲到查詢字符串中,但是如果您堅持以這種方式繼續,那么至少
WHERE (dateRead >= '$startDate' AND dateRead <= '$endDate') ...
注意'
引號...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.