Строки результата SQL из sqlsrv_fetch_array возвращают нулевые значения

#php #sql-server #sqlsrv

#php #sql-сервер #sqlsrv

Вопрос:

У меня есть SQL-запрос (к базе данных MSSQL), который выглядит следующим образом:

 $sql_timekort = "SELECT
status,
timematrise.ansatt,
SUM(normaltimer) AS normaltimer,
SUM(overtid_1) AS overtid_1,
SUM(overtid_2) AS overtid_2,
SUM(kilometer) AS kilometer,
COUNT(diett) AS diett,
COUNT(CASE WHEN diett = 'ja' THEN 1 ELSE NULL END) AS diett

FROM timematrise

WHERE status = '6'
AND dato LIKE '2019-02%'

GROUP BY ansatt, status";
  

Который запускается sqlsrv в PHP следующим образом:

 $stmt = sqlsrv_query($timeregistrering_tilkobling, $sql_timekort); if( $stmt === false) { die( print_r( sqlsrv_errors(), true) ); }
  

Результат этого запроса выглядит следующим образом в SQL Management Studio:

введите описание изображения здесь

Этот результат соответствует ожиданиям, и SQL-запрос, похоже, работает нормально. Но когда я выполняю sqlsrv_fetch_array вот так:

 while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {

    echo "<pre>";
    print_r($row);
    echo "</pre>";

}
  

Это результат:

 Array
(
    [status] => 6
    [ansatt] => 270
    [normaltimer] => .00
    [overtid_1] => .00
    [overtid_2] => .00
    [kilometer] => 0
    [diett] => 0
)
  

И вот тут я в замешательстве. Где числа? Каждое число равно либо 0,00, либо 0.

Таблица определяется следующим образом:

 status: int
ansatt: int
normaltimer: decimal(18, 2)
overtid_1: decimal(18, 2)
overtid_2: decimal(18, 2)
kilometer: decimal(18, 0)
diett: varchar(50)
  

Любая помощь приветствуется!

Комментарии:

1. Проверьте эту ссылку: learn.microsoft.com/en-us/sql/connect/php/… . Это может зависеть от вашей версии PHP или версии SQL Server.

Ответ №1:

Я не могу воспроизвести вашу ошибку, потому что в среде Windows (драйвер PHP для SQL Server 4.0.3, SQL Server 2012) все значения из decimal столбцов возвращаются правильно. Но в Linux об этом сообщается о проблеме. Сообщаемые проблемы заключаются в следующем: 1) Денежные поля возвращают 4 цифры после точки и 2) Десятичные поля не возвращают 0 в начале.

Начиная с версии 5.6 драйвера PHP для SQL Server, вы можете использовать опцию FormatDecimals на уровнях подключения и инструкции для обоих драйверов для форматирования десятичных значений в полученных результатах. Итак, это будет очевидным решением.

Комментарии:

1. Это действительно работает! С параметром FormatDecimals при подключении работает каждый результат. Спасибо!