PHP PDO Segmentation erreur de défaut de la valeur nulle de retour
-
27-09-2019 - |
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.
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