Мне нужно получить отчет на основе столбца 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 ($ conn, $ stmt)
Можете ли вы выполнить это: print_r (sqlsrv_errors (), true) после $ query = Query (...); и выложить результат? Спасибо!






Ошибка "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 (). Спасибо!
с предыдущим кодом было 24 ошибки! Тем не менее, теперь их пять, я догадался, что это логическая проблема из-за неправильных вычислений, но даже если вычисления ошибочны, запрос не должен потерпеть неудачу! должно это?
значение $ date_hour - это час последней записи с определенным идентификатором, так что, как и другие, цикл должен увеличивать его значение с 00 до $ date_hour, например. $ date_hour = 5! тогда мне нужно среднее значение от 00 до 01, 01-02, ..., с 04 до 05.
@ arian.s Я обновил ответ. Если вы хотите проверить логику, оставьте только выполнение оператора SQL.
Я нашел это, tnx луна
Используйте $ query = sqlsrv_query (...). И установите параметры для этого вызова sqlsrv_query ().