[英]SQL Server & PHP sqlsrv_fetch_array returns null when result set has only one row
[英]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。
該表的定義如下:
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環境(SQL Server 4.0.3的PHP驅動程序,SQL Server 2012)中, decimal
列中的所有值均會正確返回。 但這是在Linux中報告的問題 。 報告的問題是:1)money字段在點之后返回4位數字,並且2)小數字段在開始時不返回0。
從用於SQL Server的PHP驅動程序的5.6版開始,您可以在兩個驅動程序的連接和語句級別使用FormatDecimals選項,以格式化獲取的結果中的十進制值。 因此,這將是顯而易見的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.