(sqlsrv_fetch_array()期望参数1为资源,并提供布尔值)我是否缺少语法错误?

时间:2018-08-01 09:44:51

标签: php sql-server

我需要获取一个基于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

1 个答案:

答案 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].",";
}
...