Question

Actuellement, je suis en utilisant freetds pour se connecter à un serveur MSSQL où je tire dans un grand nombre de données comptables. Les données tire en fin jusqu'à ce qu'il frappe une valeur nulle. À ce moment-là, je ne reçois pas des erreurs PHP. Au lieu de cela, je reçois l'erreur suivante dans le journal des erreurs apache.

  

[avis] enfant pid 10235 signal de sortie Erreur de segmentation (11)

Je l'ai fait quelques recherches pour cela et trouvé cette page , mais il ne pas vraiment aider. La requête J'utilise ressemble à quelque chose comme ça,

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

Je reçois les données à l'aide d'une boucle while comme suit,

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

Je ne peux pas dire si cela est un problème avec PDO, ma couche de base de données, MSSQL, ou ma requête. De plus, je voudrais souligner que si je prends la requête et l'exécuter manuellement à l'aide studio MSSQL, il fonctionne très bien, et montre les valeurs nulles correctement.

Était-ce utile?

La solution 2

Une solution à ce problème fonctionne en ajoutant si les déclarations nulles à toutes les colonnes de retour comme ceci,

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

Si on trouve maintenant nulls, ils sont renvoyés sous forme de zéros sans erreur. Il n'est pas la plus jolie, mais cela fonctionne.

Autres conseils

défauts Segmentation sont pas de plaisir à traiter. La meilleure réponse que je peux vous donner est aux appels die('okay'); place en permanence dans divers endroits pour voir dans quelle mesure dans les différents blocs de codage que vous obtenez avant de frapper une faute de SEG. (Vous ne verrez rien s'il y avait une faute de SEG).

Il est également intéressant de simplement essayer de tout simplement mise à niveau vers les versions les plus récentes:. PHP, PDO, etc

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top