Php sqlsrv_fetch_数组中的SQL结果行返回零值

Php sqlsrv_fetch_数组中的SQL结果行返回零值,php,sqlsrv,Php,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

我有一个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";
$stmt = sqlsrv_query($timeregistrering_tilkobling, $sql_timekort); if( $stmt === false) { die( print_r( sqlsrv_errors(), true) ); }
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {

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

}
由sqlsrv在PHP中运行,如下所示:

$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";
$stmt = sqlsrv_query($timeregistrering_tilkobling, $sql_timekort); if( $stmt === false) { die( print_r( sqlsrv_errors(), true) ); }
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {

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

}
在SQL Management Studio中,此查询的结果如下所示:

这个结果与预期的一样,SQL查询似乎工作正常。但是当我像这样执行sqlsrv_fetch_数组时:

$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";
$stmt = sqlsrv_query($timeregistrering_tilkobling, $sql_timekort); if( $stmt === false) { die( print_r( sqlsrv_errors(), true) ); }
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {

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

}
这就是我困惑的地方数字在哪里?每个数字不是.00就是0

该表的定义如下:

$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";
$stmt = sqlsrv_query($timeregistrering_tilkobling, $sql_timekort); if( $stmt === false) { die( print_r( sqlsrv_errors(), true) ); }
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {

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

}

感谢您的帮助

我无法重现您的错误,因为在Windows环境(适用于SQL Server 4.0.3的PHP驱动程序,SQL Server 2012)中,
decimal
列中的所有值都会正确返回。但这是在Linux中实现的。报告的问题是:1)货币字段在点后返回4位数字,2)十进制字段在开始时不返回0


从PHP Driver for SQL Server的5.6版开始,您可以在连接和语句级别为这两个驱动程序使用选项来格式化获取结果中的十进制值。因此,这将是显而易见的解决方案。

检查此链接:。这可能取决于您的PHP版本或SQL Server版本。这实际上是可行的!通过连接处的FormatDecimals选项,每个结果都有效。非常感谢。