(sqlsrv_fetch_array () ожидает, что параметр 1 будет ресурсом, логическое значение указано в) есть ли синтаксическая ошибка, которую мне не хватает?

Мне нужно получить отчет на основе столбца datetime, который на самом деле является средним значением другого столбца за каждый час дня, поэтому я написал запрос и поместил его в цикл for, чтобы я мог изменить переменную часа для сравнения, и после этого я хочу повторить его, чтобы я мог использовать его для создания линейной диаграммы!

У меня есть что-то похожее на той же странице, и оно работает нормально, но это не так.

Я использую PHP 7 с sql Server 2016

вот код:

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

Используйте $ query = sqlsrv_query (...). И установите параметры для этого вызова sqlsrv_query ().

Zhorov 01.08.2018 12:07

Я написал функцию для, как вы можете видеть в коде, это 'Query', который является sqlsrv_query ($ conn, $ stmt)

arian.s 01.08.2018 12:24

Можете ли вы выполнить это: print_r (sqlsrv_errors (), true) после $ query = Query (...); и выложить результат? Спасибо!

Zhorov 01.08.2018 13:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
3
1 672
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка "sqlsrv_fetch_array() expects parameter 1 to be resource, boolean given" означает, что sqlsrv_query() возвращает false вместо ресурса утверждения. В вашем случае я думаю, что причина в неправильном SQL-заявлении.

Проблема может быть в столбцах date. Вам необходимо передать строковые значения в виде дат, используя однозначный формат даты и времени, в вашем случае '2010-01-27T15:33:13.343'. Я также предполагаю, что $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].",";
}
...

@ arian.s Странно, в моем тесте работает. Можете ли вы опубликовать значения для $ date_month, $ date_day и $ key_id, и как именно вы вызываете sqlsrv_query (). Спасибо!

Zhorov 02.08.2018 08:53

с предыдущим кодом было 24 ошибки! Тем не менее, теперь их пять, я догадался, что это логическая проблема из-за неправильных вычислений, но даже если вычисления ошибочны, запрос не должен потерпеть неудачу! должно это?

arian.s 02.08.2018 09:02

значение $ date_hour - это час последней записи с определенным идентификатором, так что, как и другие, цикл должен увеличивать его значение с 00 до $ date_hour, например. $ date_hour = 5! тогда мне нужно среднее значение от 00 до 01, 01-02, ..., с 04 до 05.

arian.s 02.08.2018 09:05

@ arian.s Я обновил ответ. Если вы хотите проверить логику, оставьте только выполнение оператора SQL.

Zhorov 02.08.2018 09:20

Я нашел это, tnx луна

arian.s 02.08.2018 10:12

Другие вопросы по теме