我需要获取一个基于datetime列的报告,该列实际上是一天中每小时的另一列的平均值, 所以我写了一个查询并将其放在for循环中,以便可以更改小时变量以进行比较,然后我想回显它,以便可以使用它来创建折线图!
我在同一页面中有类似内容,并且工作正常,但是没有。
我在SQL Server 2016中使用PHP 7
这是代码:
for ($i = 1; $i <= $date_hour ; $i++)
{
$j = $i-1;
$query = Query("SELECT AVG(sp_efficiency_r) FROM sp_data_records WHERE sp_detail_id_r =$key_id and sp_sent_time_r >= '2018- $date_month - $date_day $j :00:00.000' and sp_sent_time_r <= '2018-$date_month-$date_day $i:00:00.000'");
$row = sqlsrv_fetch_array($query,SQLSRV_FETCH_NUMERIC);
echo $row[0].",";
if ($flag1 = true) {
$flag1 = false;
$date_day++;
}
elseif ($flag = true) {
$date_day = 1;
$flag = false;
}
}
我使用了我在互联网上可以找到的有关级联的所有内容,例如“ {$data}
”和“ . $data .
”对我显示了相同的错误。
我是这个菜鸟,所以如果您能帮助我提供尽可能多的细节,我会很高兴。 TNX
答案 0 :(得分:0)
错误"sqlsrv_fetch_array() expects parameter 1 to be resource, boolean given"
表示sqlsrv_query()
返回false而不是语句资源。在您的情况下,我认为原因是错误的SQL语句。
问题可能出在日期字段上。例如,如果SQL Server将字符串值的格式设置为“ 2010-01-27T15:33:13.343”,则SQL Server会将其理解为日期。我还假设$date_month
,$date_day
和$key_id
被定义为数字。
因此,您可以尝试以下操作:
...
for ($i = 1; $i <= $date_hour ; $i++) {
$j = $i-1;
$sql =
"SELECT AVG(sp_efficiency_r)
FROM sp_data_records
WHERE
(sp_detail_id_r = ".$key_id.") AND
(sp_sent_time_r >= '".sprintf("2018-%02d-%02dT%02d:00:00.000", $date_month, $date_day, $j)."') AND
(sp_sent_time_r <= '".sprintf("2018-%02d-%02dT%02d:00:00.000", $date_month, $date_day, $i)."')
";
$query = Query($sql);
# Next 2 lines are just for test
echo "Possible error message: ";
print_r(sqlsrv_errors(), true);
$row = sqlsrv_fetch_array($query, SQLSRV_FETCH_NUMERIC);
echo $row[0].",";
}
...