Строка результата SQL из sqlsrv_fetch_array возвращает нулевые значения - PullRequest
0 голосов
/ 15 марта 2019

У меня есть запрос 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 выглядит следующим образом:

enter image description here

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

<code>while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {

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

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

Array
(
    [status] => 6
    [ansatt] => 270
    [normaltimer] => .00
    [overtid_1] => .00
    [overtid_2] => .00
    [kilometer] => 0
    [diett] => 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 Ответ

1 голос
/ 29 марта 2019

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

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

...