PDO_OCI : exécution et retour vide

Mammouth du PHP | 19672 Messages

20 sept. 2007, 13:31

Bonjour,
je fais face à un mystère pour le moins surprenant.

Dans l'application sur laquelle je travaille actuellement, on se connecte sur une base Oracle 10g. Tout semble fonctionner normalement sauf pour une requête. On utilise PDO et des requêtes préparées. Pour cette seule requête, le retour est vide.

Pour vérifier, j'ai exécuté un débuggage pas-à-pas, récupéré le libellé de la requête générée, requête que j'ai exécuté en direct dans un client Oracle. Là, pas de problème, j'obtiens bien la liste des résultats attendus. Mais l'exécution via PDO ne retourne rien du tout.

J'ai fait afficher un $stmt->errorInfo() : aucune erreur n'est retournée. Comme dans le bureau on a pas tous des mises à jour similaires (certains en PHP 5.2.2, d'autres en 5.2.3 et moi en 5.2.4), étant le seul à ne pouvoir obtenir les données, j'ai remis en place un PHP 5.2.3. Le résultat est strictement le même, je n'ai toujours pas les résultats attendus. J'ai vérifié mes pilotes, dll et autres possibilités de configuration sans succès.

Je cherche une piste de solution à explorer parce que là, j'arrive à bout de ressources... et c'est d'autant plus surprenant que le reste de la page avec les données d'autres requêtes s'affichent sans le moindre problème, et encore une fois il n'y a que sur mon poste que ça bafouille. Détail important, j'utilise exactement le même code que les autres, mis à jour via SVN. |*()

[EDIT]
Bon visiblement, mon soucis ne trouve pas preneur... Je vais essayer sur developpez.com, il y a un des forums spécialisé, j'aurai peut-être plus de chances... :?
[/EDIT]
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 19672 Messages

25 sept. 2007, 09:42

Petit élément pour peut-être avancer un peu.
Je me suis livré à quelques expériences et il semble que le problème vienne de PDO. En pas-à-pas, j'ai récupéré la requête générée qui, après quelques ajouts pour tester, ressemble à ceci :

Code : Tout sélectionner

SELECT * FROM MA_TABLE WHERE FK_ID = 121 AND to_date(MACOLONNE_DATE, 'dd/mm/yy') > to_date('25/09/07', 'dd/mm/yy') AND to_date(MACOLONNE_DATE, 'dd/mm/yy') < to_date('25/10/07', 'dd/mm/yy') ORDER BY MACOLONNE_DATE
Lors d'une exécution directe, j'obtiens bien la liste des dates attendues. Mais avec un $stmt->execute(), je lève une exception dont voici le début :
Erreur de débogage: C:\www\auchandirect_project\framework\dataObject\slotdate.php ligne 245 - Uncaught exception 'PDOException'
with message '
SQLSTATE[HY000]:
General error: 1847
OCIStmtExecute: ORA-01847:
le jour du mois doit être compris entre 1 et le dernier jour du mois
...
Je ne rêve pourtant pas, la donnée envoyée est bonne. Donc PDO_OCI doit traiter la requête de manière inattendue et Oracle ne reçoit pas la chaine que j'envoie.

Une piste de recherche serait bienvenue si quelqu'un a une idée...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: