|
Publicité ' | ||||||||||||||||||||||
|
|
#1 | ||
|
Membre Expert
![]() Développeur informatique Inscription : août 2005 Messages : 1 179 ![]() |
Bonjour,
Voilà un problème sur lequel je bloque depuis plusieurs jours... J'ai déclaré dans mon shema yaml un champ de type string sans contrainte de longueur. la table créée dans Oracle par doctrine définit pour ce champ le type CLOB J'ai donc crée un listener héritant de Doctrine_Record_Listener afin de récupérer le flux du champ et de le modifier en string à la volée : Code :
Toute aide sera bienvenue !!
__________________
http://cdemarche.developpez.com/ Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
|
||
|
|
00
|
|
|
#2 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Un clob en php, il est vu comme un string non ?
Je ne comprend pas trop l'intérêt de tous ce code compliqué ? Il me manque le : "mais pourquoi qu'il fait si compliqué qu'il a surement raison mais que je n'en vois vraiment pas l'intérêt". Si tu avais le pourquoi, j'aurais peut-être une solution...
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#3 | |
|
Membre Expert
![]() Développeur informatique Inscription : août 2005 Messages : 1 179 ![]() |
eh ben non justement, le CLOB dans oracle permet de stocker du binaire (une image par exemple) comme du textuel de plus de 4ko, mais le format texte est stocké en ASCII aussi.
c'est pourquoi je suis obligé de le parser à la manière d'un flux de fichier avec stream_get_contents() Citation:
Le listener est executé par le gestionnaire d'événement de doctrine avant chaque hydratation (passage du result sql sous forme d'objet en un tableau de valeur), ceci quand on appelle la méthode fetchArray() de l'objet Doctrine_Query Je crée un Listener appliqué à la connexion (CAD à toutes les tables) afin de gérer tous les champs de type CLOB de la même façon. En gros, cela m'évite de modifier manuellement le jeu de résultats à chaque DQL... Ce que je ne comprends pas, c'est que j'affiche le résultat de stream_get_contents() mais que je n'arrive pas à le pusher dans un array. C'est comme si la méthode ne renvoyait pas vraiment un string mais plutôt un standard out (comme print_r() en somme ) ou un truc du genre... Petite précision, je force le charset doctrine en ISO8859-1 (mon appli fonctionne en UTF-8) mais je pense qu'il n'y a pas de rapport... merci
__________________
http://cdemarche.developpez.com/ Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
|
|
|
|
00
|
|
|
#4 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
J'étais passé à côté du fait que tu utilises Oracle, qui manque à ma culture en temps que base liée à php (utilisé, mais pas dans ce cadre).
Donc... question idiote, as-tu déjà fait des recherches sur google pour ce truc ? Tu ne dois pas être le seul à utiliser oracle avec des clob et doctrine ? Si non, je n'ai jamais utilisé les listner sous doctrine, je suppose qu'il doivent ressembler à l'équivalent que l'on a sous symfony, mais ce n'est qu'une supposition. Ta fonction stream_get_contents est bien sensée retourner du string. Essaye peut-être de passer par une variable intermédiaire ? Et de vérifier le contenu de la variable (j'ai déjà eu une fois un truc pareil avec je ne sais plus quel fonction, il fallait passer par une variable, un bug de php dans une vielle version de 4 quelque chose.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Développeur informatique Inscription : août 2005 Messages : 1 179 ![]() |
Merci de ta réponse,
Le listener est une solution que j'ai trouvé/adapté sur la toile... j'ai déjà essayé en vain de passer par une allocation intermédiaire. Résultat identique. Tomorrow will be a better day !
__________________
http://cdemarche.developpez.com/ Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
|
|
|
00
|
|
|
#6 | ||
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Bon, si on doit voir cela demain, ca me laisse une journée pour y réfléchir.
Le pb est que je n'ai pas de base oracle sous la main pour tester quoi que cela soit. Questions : Quel est le message d'erreur ? Est-il systématique (champ vide, champ très petit) ? Est-ce le même message si tu passes par une variable intermédiaire ? Exemple de code pour le passage par une variable intermédiaire : Code :
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
||
|
00
|
|
|
#7 | ||
|
Membre Expert
![]() Développeur informatique Inscription : août 2005 Messages : 1 179 ![]() |
Bonjour Michel,
Tout d'abord, merci de ta réactivité... ![]() Ca marche enfin !!! J'ai en fait combiné 2 solutions dont la tienne... Je ne comprends pas très bien comment fonctionne la fonction stream_get_contents() en natif, je ne parle pas de la doc, mais de son fonctionnement réel. Il fallait que je précise la longueur du tampon (ici -1 pour "tout le flux") et que je l'empile dans une variable... Si j'ai le temps, j'approfondirai ma recherche plus tard. pour info, je suis sous PHP5.3.1 Code :
__________________
http://cdemarche.developpez.com/ Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
|
||
|
|
00
|
|
|
#8 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Ca ressemble furieusement au bug que j'avais sur la 4...
Tu devrais pouvoir te passer de la variable et faire la même chose directement dans le tableau. Heureux que cela marche. Comme quoi, les vieux bogue peuvent donner de nouvelles solutions
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
Copyright © 2000-2012 - www.developpez.com