sqlsrv_fetch_array中的SQL结果行返回零值

问题描述 投票:0回答:1

我有一个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";

这是由PHP中的sqlsrv运行的,如下所示:

$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)

任何帮助表示赞赏!

php sqlsrv
1个回答
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选项,以便在获取的结果中格式化十进制值。所以,这将是一个明显的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.