2010-11-22 118 views
1

當前我正在使用freetds連接到MSSql服務器,我正在使用大量會計數據。數據一直處於正常狀態,直到它達到空值。那時我沒有收到任何PHP錯誤。相反,我在apache錯誤日誌中得到以下錯誤。PHP PDO空值返回值上的分段錯誤錯誤

[聲明]兒童PID 10235退出信號分割故障(11)

我做了一些搜索,這和發現this page,但它並沒有真正的幫助。我使用看起來像這樣的查詢,

SELECT DISTINCT(t1.PEREND), t2.ERATE, t2.EEXTEND, t2.EARNDED, t1.ENTRYSEQ 
     FROM UPCHKD as t1 LEFT JOIN 
      (SELECT EARNDED, PEREND, ERATE, EEXTEND, ENTRYSEQ FROM UPCHKD 
        WHERE (EARNDED LIKE '401K%'AND EARNDED NOT LIKE '401KL%') AND 
          EMPLOYEE = ? AND PEREND >= ? AND PEREND <= ?) as t2 ON t1.PEREND = t2.PEREND 
     WHERE t1.PEREND >= ? AND t1.PEREND <= ? AND t1.EMPLOYEE = ? ORDER BY PEREND 

而且我正在使用類似下面的while循環的數據,

while($result = $sth->fetch(PDO::FETCH_ASSOC)) { 
    //Deal with data here 
} 

我不能說這是否是與PDO的一個問題,我的數據庫層,MSSQL或我的查詢。另外,我想指出的是,如果我使用MSSQL studio手動執行查詢並運行它,它將運行正常,並正確顯示空值。

回答

0

一個解決這個問題的作品加入,如果空語句對所有的回報列像這樣,

ISNULL(t2.ERATE, 0) as ERATE, ISNULL(t2.EEXTEND, 0) as EEXTEND, ISNULL(t2.EARNDED, '') as EARNDED 

如果現在發現空值,它們將返回爲零而不會出錯。這不是最漂亮的,但它的工作原理。

1

分割錯誤並不好玩。我可以給你的最好的答案是在不同地方連續撥打die('okay');的電話,以查看你在遇到seg故障之前在不同的編碼塊中有多遠。 (如果發生seg故障,您將看不到任何東西)。

這也是值得只是想剛剛升級的一切到最新版本:PHP,PDO等