IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Mes gros clobs sont tronqués [Oracle]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 55
    Par défaut Mes gros clobs sont tronqués
    Bonjour,

    Pour lire une base Oracle 9.2 avec PHP 5, j'ai utilisé des pilotes ODBC.

    Ce choix vient de ce que le progiciel utilisateur principal de la base de données (Serena-Mashup) passe aussi par ODBC, peut donc se connecter à d'autres SGBD attaquables en ODBC, et qu'il semblait préférable de rester cohérent.

    Le seul problème que je rencontre est avec la lecture de CLOB de (très) grande taille : aucune erreur n'est retournée, mais seuls les premiers 32 Ko sont lus dans l'élément correspondant au champ, du tableau retourné par odbc_fetch_array.

    Ce qui est curieux c'est que le progiciel (qui utilise C et non PHP, mais le même pilote ODBC) récupère la totalité de la donnée, et que PHP à ma connaissance ne limite pas la taille de ses chaînes de caractères.

    D'où est-ce que cela peut venir ?

    Je veux bien essayer les pilotes OCI mais quelqu'un peut-il me certifier qu'ils ne rencontre pas le même problème avec des CLOBS aussi gros ? Ca m'évitera une installation compliquée pour rien...

    Merci de votre aide.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 55
    Par défaut
    J'ai fini par trouver une réponse, pas très satisfaisante, mais qui permet de limiter les problèmes.

    J'appelle odbc_longreadlen(n) avant chaque lecture de données, en donnant à n une valeur arbitraire assez grande, et je suis assuré de récupérer au moins n octets.

    La doc de cette fonction sur le site php est à mon avis erronée ou incomplète, car cela ne concerne pas le type LONG, mais surtout les BLOB et CLOB.

    Il y a un paramètre odbc.defaultlrl dans le php.ini qui est supposé donner une valeur par défaut à longreadlen, mais sa modification n'a aucun effet. phpinfo retourne toujours la même valeur, quelque soit ce qu'on met dans le php.ini pour ce paramètre : c'est un bug, ou alors je n'y comprends rien !

    De toutes façons, devoir donner un maximum est vraiment ennuyeux. Je n'ai pas osé donner à n la taille maximum d'un CLOB, car je crains que cela ne soit consommateur (on ne sait pas très bien). Donc il y aura des cas où des données seront perdues. Je n'ai jamais rencontré cette limitation en dehors de php.

    Si vous avez des commentaires, ou d'autres expériences, ils seront les bienvenus.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 22/09/2006, 01h28
  2. [Cookies] Mes cookies ne sont pas créés
    Par YavaDeus dans le forum Langage
    Réponses: 3
    Dernier message: 31/01/2006, 09h41
  3. [XSL] Mes entités ne sont pas prises en compte
    Par trent94 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/07/2005, 18h49
  4. [JSTL] Mes variables ne sont pas remplacées par leur valeur
    Par thomine dans le forum Taglibs
    Réponses: 9
    Dernier message: 18/03/2005, 10h00
  5. Réponses: 17
    Dernier message: 15/10/2003, 01h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo