Rendre les erreurs lisibles
- 23/07/2008
Développement://
Rendre les erreurs lisiblesSupprimant des lignes pour voir si elles servent à quelque chose (voir un précédent billet), je tombe sur cette erreur.
1) testMessages_FiltreChercher(IterateurMessagesTest)
Erreur SQL (champ inconnu : msg_id_fk) (SELECT DISTINCT dis_id AS id, dis_titre AS titre, DATE_ADD(m.msg_dateheure, INTERVAL 2 HOUR) AS dateheure, m.msg_etat AS etat, d.msg_id_fk
FROM aa_discussions AS d
INNER JOIN aa_messages AS m ON d.msg_id_fk = m.msg_id
INNER JOIN aal_sujets_discussions AS l3 ON d.dis_id = l3.dis_id_fk
INNER JOIN aal_groupes_sujets AS l1 ON l3.suj_id_fk = l1.suj_id
INNER JOIN aal_groupes_membres AS l2 ON l1.grp_id = l2.grp_id AND l2.mem_id = 0
WHERE dis_id = 1
AND ( ( m.msg_etat NOT IN ("censurer", "spam") AND ( m.msg_etat IN ("a_verifier", "valider", "en_discussion") OR m.mem_id_fk = 0 ) ) OR (0) ))
\code\classes\db_sql.class.php:18
\code\classes\db_sql.class.php:278
\code\classes\iterateurs.class.php:145
\testsUnitaires\code\dataobjects\messages.data.test.php:16
\testsUnitaires\code\dataobjects\messages.data.test.php:80
\testsUnitaires\index.php:128
J'ai la pile des appels de fonction, tous les endroits par où est passé le code, mais comprendre d'un coup d'oeil d'où cela vient... Le champ est inconnu, pourtant il est bien présent dans la requête. Quelle est cette diablerie?
La diablerie en question vient de la librairie d'accès aux données, qui signale la même erreur (champ inconnu) que le champ n'existe réellement pas ou que la requête ait retourné un résultat vide. Le tout pour des raisons de construction, certes, mais le développeur qui se retrouve face à l'erreur n'en a rien à faire.
La meilleure solution est de modifier les fonctions d'accès aux champs, en signalant dès le début que les appeler alors que le résultat est vide relève de la mauvaise utilisation. Le message est alors bien plus adapté au niveau auquel travaille le développeur à ce moment là. Un simpleif($this->Vide()) throw new Exception("CIterateurDBSQL::__get($champ) : resultat DB vide");
produit l'explicite message suivant :1) testMessages_FiltreChercher(IterateurMessagesTest)
Exception: CIterateurDBSQL::__get(msg_id_fk) : resultat DB vide
\testsUnitaires\code\dataobjects\messages.data.test.php:16
\testsUnitaires\code\dataobjects\messages.data.test.php:80
\testsUnitaires\index.php:128
et ceci, pour toutes mes requêtes puisque je travaille dans le point de passage unique qu'est la classe d'accès aux données. Du temps gagné pour le futur!
Rubriques des billets
- Agilité - 16 billets
- Archerie - 8 billets
- Avis - 51 billets
- Cultures - 10 billets
- Délires - 35 billets
- Démocrachie - 6 billets
- Développement - 27 billets
- Développement web - 23 billets
- Ergonomie - 17 billets
- Geekerie - 11 billets
- Inclassable - 5 billets
- Informatique - 19 billets
- Japon - 3 billets
- Littératures - 34 billets
- PHP - 5 billets
- Poor Lonesome Coder - 19 billets
- Régalons-nous - 6 billets
- Sortons! - 2 billets
- Travail - 16 billets
- Voyages - 2 billets
- Webmasteriat - 18 billets
Commentaires(s)
Ecrire votre commentaire
23/07/2008 - Systeme