PHP : PDO et ses misères...
Par Seza le samedi 23 février 2008, 12:35 - Programmation - Lien permanent
Petite note rapide :
PDO pour la nième fois m'à fait des misères ce matin. Je devrais préciser PDO + driver Mysql car je ne saurait dire lequel des deux est coupable dans l'histoire.
Si PDO est récent et donc sa manipulation nouvelle. Certes c'est normal que l'on se retrouve confronter à des erreurs " de débutant ". Mais ce matin j'ai passé une heure à cherché le pourquoi ça marche pas.
Il y a peu j'avais été confronter à une requête sql qui ne retournait rien. Après avoir cherché dans la doc PHP. l'instruction PdoStatement->closeCursor() s'avérait être la solution. Autant pour moi c'était clairement indiquer dans la doc.
Aujourd'hui le même BUG se présente. Un select qui ne retourne rien et bien entendu il est éxécuté après une suite de select. Si je le place en tête de liste, il fonctionne mais les suivants ne fonctionnent plus. Ce coup-ci je n'ai pas fait l'idiot et j'avait bien mis des closeCursor() après chaque requête (même celle qui lise la liste complète de résultat).
Alors que faire dans ce cas ? Après plus d'une heure j'ai trouver une solution. faire un unset(pdoStatement) derrière le closeCursor() et comme par magie tout est revenu dans l'ordre.
J'apprécie travailler avec PDO globalement même si certaine fonctionnalité sont abstente oou d'autre parraisse fonctionner étrangement voir certainre qui diverge complètement de la doc. Je doit avoir que je commence un peu à fatiguer de ce genre de mauvaise surprise.
Pourquoi je rale ? Parceque pendant que je cherchait une solution à ce bug j'ai remis en cause réellement l'utilisation de PDO dans mon application. et après avoir trouver la solution j'ai repris tout mon code (quelques dizaine de millier de lignes) afin de rajouter des unset() après chaque requête. J'ai maintenant la crainte qu'un nouveau bug PDO m'oblige à revoir mon architecture ou changer de driver.
Résultat ma confiance en PDO diminue d'un cran et c'est bien dommage.
Commentaires
Actuellement je galère à trouver comment insérer NULL dans un champ lorsque qu'une chaine est vide. Je ne te cache pas que j'ai testé les différentes méthodes pour les requêtes préparées ainsi que diverses constantes prédéfinies par PDO. Rien à faire. Il insère une chaine vide à chaque fois.
Même google ne fait que recenser les cas de personnes dans la même situation que moi.
J'attends de voir comment ça évolue.
Tiens allons bon ! Je n'aurais jamais pensée avoir des problèmes avec NULL.
Je ne te prends pas pour un débile mais n'essaies-tu pas de rentrer NULL dans un champ spécifié comme NOT NULL au moment de la création de la table.
De mon côté je fais pas mal de SELECT ou j'ai des valeur NULL et jusqu'à maintenant IS NOT NULL ou IS NULL fonctionnent bien.
Bon courage !