来自sqlsrv_fetch_array的SQL结果行返回零值

时间:2019-03-15 15:36:48

标签: 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' 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时:

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
)

这就是我感到困惑的地方。 数字在哪里?每个数字都是.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 个答案:

答案 0 :(得分:1)

我无法重现您的错误,因为在Windows环境(用于SQL Server 4.0.3的PHP驱动程序,SQL Server 2012)中,decimal列中的所有值均已正确返回。但这是Linux中的reported issue。报告的问题是:1)货币字段在点之后返回4位数字,并且2)小数部分在开始时不返回0。

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