1

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

[通知] child pid 10235 exit signal Segmentation fault (11)

我做了一些搜索并找到了这个页面,但它并没有真正帮助。我正在使用的查询看起来像这样,

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 手动运行查询并运行它,它运行良好,并正确显示空值。

4

2 回答 2

1

处理分段错误并不有趣。我能给你的最好的答案是不断地die('okay');在不同的地方打电话,看看在你遇到段错误之前你在不同的编码块中能走多远。(如果有段错误,您将看不到任何东西)。

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

于 2010-11-22T23:17:18.920 回答
0

解决此问题的一种方法是向所有返回列添加 if null 语句,如下所示,

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

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

于 2010-11-30T20:12:26.603 回答