Ошибка ошибки сегментации PHP PDO при нулевом возвращаемом значении - PullRequest
1 голос
/ 22 ноября 2010

В настоящее время я использую freetds для подключения к серверу MSSql, на котором я собираю много бухгалтерских данных. Данные растягиваются до тех пор, пока не достигнут нулевого значения. На данный момент я не получаю никаких ошибок PHP. Вместо этого я получаю следующую ошибку в журнале ошибок Apache.

[извещение] дочерний пид 10235 выходной сигнал Ошибка сегментации (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, он будет работать нормально и правильно отображает нулевые значения.

Ответы [ 2 ]

1 голос
/ 23 ноября 2010

С ошибками сегментации не весело иметь дело. Лучший ответ, который я могу вам дать, - это постоянно совершать die('okay'); звонки в разных местах, чтобы увидеть, как далеко вы пройдете в разных блоках кодирования, прежде чем столкнетесь с ошибкой сегмента. (Вы ничего не увидите, если произошла ошибка сегмента).

Стоит также попробовать обновить все до последних версий: PHP, PDO и т. Д.

0 голосов
/ 30 ноября 2010

Одно из решений этой проблемы заключается в добавлении пустых операторов во все возвращаемые столбцы, например:

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

Если нулевые значения найдены сейчас, они возвращаются в виде нулей без ошибок. Это не самая красивая, но это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...