返回值为null的PHP PDO分段错误错误

时间:2010-11-22 16:15:40

标签: sql-server-2005 pdo segmentation-fault php-5.3

目前我正在使用freetds连接到MSSql服务器,我在那里提取了大量的会计数据。数据正在拉动,直到达到空值。那时我没有收到任何PHP错误。相反,我在apache错误日志中收到以下错误。

  

[notice] child 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手动运行查询,它运行正常,并正确显示空值。

2 个答案:

答案 0 :(得分:1)

分割错误处理起来并不好玩。我能给你的最佳答案是不断在各个地方放置die('okay');个电话,看看在你遇到seg故障之前你得到的不同编码块有多远。 (如果出现seg故障,你不会看到任何东西)。

尝试将所有内容升级到最新版本也是值得的:PHP,PDO等。

答案 1 :(得分:0)

此问题的一个解决方案是将if语句添加到所有返回列,如此,

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

如果现在找到空值,它们将作为零返回而不会出现错误。它不是最漂亮的,但它确实有效。