SQL 来自 sqlsrv_fetch_array returns 个零值的结果行
SQL result rows from sqlsrv_fetch_array returns zero values
我有一个 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
)
这就是我感到困惑的地方。 数字在哪里?每个数字都是 .00 或 0。
table的定义是这样的:
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)
感谢任何帮助!
我无法重现您的错误,因为在 Windows 环境中(PHP SQL Server 4.0.3 的驱动程序,SQL Server 2012)所有来自 decimal
列的值已正确返回。但这是 Linux 中的 reported issue。报告的问题是:1) 货币字段 returns 点后 4 位数字和 2) 小数字段不 returns 0 开头。
从 PHP Driver for SQL Server 的 5.6 版开始,您可以在两个驱动程序的连接和语句级别使用 FormatDecimals 选项来格式化获取的结果中的十进制值。所以,这将是显而易见的解决方案。
我有一个 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
)
这就是我感到困惑的地方。 数字在哪里?每个数字都是 .00 或 0。
table的定义是这样的:
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)
感谢任何帮助!
我无法重现您的错误,因为在 Windows 环境中(PHP SQL Server 4.0.3 的驱动程序,SQL Server 2012)所有来自 decimal
列的值已正确返回。但这是 Linux 中的 reported issue。报告的问题是:1) 货币字段 returns 点后 4 位数字和 2) 小数字段不 returns 0 开头。
从 PHP Driver for SQL Server 的 5.6 版开始,您可以在两个驱动程序的连接和语句级别使用 FormatDecimals 选项来格式化获取的结果中的十进制值。所以,这将是显而易见的解决方案。