2010-11-22 10 views
1

Derzeit verwende ich freetds, um eine Verbindung zu einem MSSQL-Server, wo ich eine Menge von Buchhaltungsdaten ziehen. Die Daten ziehen sich gut, bis sie einen Nullwert erreichen. Zu diesem Zeitpunkt erhalte ich keine PHP-Fehler. Stattdessen erhalte ich den folgenden Fehler im Apache-Fehlerprotokoll.PHP PDO Segmentierung Fehler Fehler auf Null Rückgabewert

[Ankündigung] Kind pid 10235 Ausgang Störmeldung Segmentation (11)

Ich habe für diese einige der Suche und fand this page, aber es hilft nicht wirklich. Die Abfrage, die ich wie folgt aussieht etwas verwende,

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 

Und ich bin die Daten immer eine while-Schleife wie die folgenden verwenden,

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

Ich kann nicht sagen, ob dies ein Problem mit PDO ist, Meine Datenbankschicht, MSSQL oder meine Abfrage. Auch möchte ich darauf hinweisen, dass wenn ich die Abfrage nehme und es manuell mit MSSQL Studio ausführen, läuft es gut und zeigt die Null-Werte richtig.

Antwort

0

Eine Lösung für dieses Problem durch Hinzufügen, wenn null Aussagen zu allen Return Spalten funktioniert wie so,

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

Wenn Nullen jetzt gefunden werden, werden sie ohne Fehler als Nullen zurückgegeben. Es ist nicht das Schönste, aber es funktioniert.

1

Segmentierungsfehler machen keinen Spaß. Die beste Antwort, die ich Ihnen geben kann, ist, die('okay'); Aufrufe an verschiedenen Orten kontinuierlich zu platzieren, um zu sehen, wie weit in verschiedenen Codierungsblöcken Sie erhalten, bevor Sie einen seg-Fehler treffen. (Sie werden nichts sehen, wenn ein Seg-Fehler aufgetreten ist).

Es ist auch nur ein Versuch wert, alles auf die neuesten Versionen nur zu aktualisieren: PHP, PDO usw.