Voici un petit topo sur le fait d’avoir dans de temps à autre des valeurs nulles dans le Fetch d’un curseur MySQL. Alors que la requête du curseur renvoie bien des données.
C’est un problème que j’ai rencontré déjà deux fois. Et avant de me poser les bonnes questions je passe pas mal de temps à débugger mon code sans trop comprendre. Du coup je vous en fais part également au cas où vous rencontriez le souci.
Le problème peut arriver en utilisant les curseurs MySQL (le détail de leur utilisation est décrit dans cet article).
Je viens de rencontrer le cas (avec MySQL 5.5) alors que le problème est ancien mais n’a pas été corrigé (et n’est pas considéré comme un bug d’ailleurs, donc il ne sera sans doute jamais).
Le cas :
J’ai une procédure MySQL qui utilise un curseur pour boucler sur un enregistrement. A chaque tour, un fetch permet d’alimenter des variables, qui sont ensuite utilisées pour réaliser certains calculs. Un cas relativement classique.
Pourtant, à chaque sortie, le calcul qui aurait du me sortir un chiffre me répondait NULL. En creusant un peu, j’ai vérifié l’état de mes variables alimentées par le Fetch. Et la plupart de mes variables étaient à NULL, alors que la ligne en base comprend bien des données.
A force de chercher, j’ai fini par rechercher sur le web, et je suis tombé sur cette page sur le site de MySQL.
La cause du problème était lié au fait que les variables que j’utilisais portaient le même nom que les champs de la base. Cela peut se discuter d’ailleurs si c’est une mauvaise pratique ou pas, toujours est-il que cela peut créer des problèmes.
Bon à savoir donc.