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

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    avril 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : avril 2018
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Affichage de mémo texte tronqué à 255 caractères - PHP & HFSQL via PDO ODBC
    Bonjour chers amis développeurs !

    Je suis en train de mettre en place un site web en PHP, et je dois me connecter à une base de données HyperFile SQL.
    Jusque là tout va bien, j'arrive à interagir sans soucis sur la base de données via PDO & ODBC.
    J'ai juste un petit soucis : lorsque je récupère les données des mémos texte, ces données sont tronquées au bout de 255 caractères. Les autres caractères récupérés sont complètement buggés.
    Je précise que je travaille actuellement avec WAMP Manager et donc je n'ai qu'un serveur de test, pas un vrai, et je travaille sous la version PHP 7.1.9 (j'ai essayé de changer de passer en version 5.6.31 mais cela n'a rien changé).
    Plusieurs forums tentent d'apporter une solution à ce bug, mais aucune n'a fonctionné jusqu'à présent pour mon cas (il faut dire que les solutions proposées concernent MSSQL Server et pas HFSQL ou ODBC, donc difficile de trouver une solution adaptée :s) :


    Des exemples en disent plus long que du texte, donc voici le problème en détails :
    1) Le code PHP :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    // Configuration de la connexion à la BDD
    $connexion['DSN']		= '{HFSQL}';
    $connexion['IPServeur']		= 'XXX';
    $connexion['Port']		= 'XXX';
    $connexion['NomBDD']		= 'XXX';
    $connexion['LoginServeur']	= 'XXX';
    $connexion['MDPServeur']	= 'XXX';
    $dsn = sprintf('odbc:DRIVER=%s;Server Name=%s;Server Port=%s;Database=%s;UID=%s;PWD=%s;', $connexion['DSN'], $connexion['IPServeur'], $connexion['Port'], $connexion['NomBDD'], $connexion['LoginServeur'], $connexion['MDPServeur']);
     
    try{
    	// Connexion à la BDD
    	$bdd = new PDO($dsn, '', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
     
    	// Initialisation de la requête
    	$sql 		= 'SELECT CorpsHTML FROM T_ModeleEmail WHERE T_ModeleEmail.IDModeleEmail = :IDModeleEmail';
    	$requete 	= $this->getBDD()->prepare($sql);
     
    	// Affectation des paramètres
    	$tmpIDModeleEmail = 2;
    	$requete->bindValue(':IDModeleEmail', $tmpIDModeleEmail, PDO::PARAM_INT);
     
    	// Exécution de la requête
    	$requete->execute();
     
    	// Récupération du 1er résultat
    	$donnees = $requete->fetch(PDO::FETCH_ASSOC);
     
    	var_dump($donnees);
     
    	// On libère la requête
    	$requete->closeCursor();
     
    	// On vérifie qu'on a bien trouvé un modèle email
    	if(!empty($donnees)){
    		// Renvoi de l'objet trouvé après hydratation
    		return new ModeleEmail($donnees);
    	}else{
    		return null;
    	}
    }catch(PDOException $e){
    	// Gestion des exceptions : arrête le script s'il y a une erreur
    	die('Impossible de se connecter aux données du site. [Code de l\'erreur : '. $e->getCode() . '] Détails : ' . utf8_encode($e -> getMessage()));
    }

    2) L'enregistrement récupéré en base de données, qui est un mémo texte (8 octets), et qui est tronqué à 255 caractères lors de la récupération :
    Nom : EnregistrementBDD.PNG
Affichages : 235
Taille : 6,6 Ko

    3) Le résultat affiché :
    Nom : ResultatAffichage.PNG
Affichages : 235
Taille : 11,8 Ko

    Pour information, notez que j'ai également trouvé une alternative "bizarre" pour afficher le reste du contenu, mais évidemment ce n'est pas une solution. Je le poste aussi ci-dessous à titre informatif car je ne comprends pas pourquoi ça parvient à afficher la suite ni de quelle manière
    Le code PHP (ajout d'un "bindColumn") :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // Affectation des paramètres
    $tmpIDModeleEmail = 2;
    $requete->bindValue(':IDModeleEmail', $tmpIDModeleEmail, PDO::PARAM_INT);
    $requete->bindColumn('CorpsHTML', $tmp);
     
    // Exécution de la requête
    $requete->execute();
     
    // Récupération du 1er résultat
    $donnees = $requete->fetch(PDO::FETCH_ASSOC);
     
    var_dump($donnees);
    echo 'TMP = '. $tmp;

    Et là comme par magie ça m'affiche la suite du texte, certes de manière un peu tordue mais bon :
    Nom : ResultatAffichage_V2.PNG
Affichages : 233
Taille : 17,1 Ko
    PS : Je précise que l' "EXCEPTION" que l'on voit à la fin n'a aucun rapport, c'est moi qui l'ai déclenchée manuellement pour éviter de charger toute la page derrière, et ainsi garder uniquement le texte tronqué.

    Merci beaucoup d'avance pour votre aide
    Bonne journée,
    Mickaël

  2. #2
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    avril 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : avril 2018
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    A force de trifouiller à droite à gauche, j'ai finalement trouvé une solution.
    Certes, elle n'est pas du tout optimisée et implique de lourds changements dans la structure des données, mais au moins je ne suis plus bloqué.
    Donc, pour les intéressés, voici comment résoudre un tel problème :

    1. Convertir toutes les rubriques textes (Mémo texte) en varchar (texte sur XXXX caractères)
    2. Mettre en place une connexion ODBC pour les requêtes récupérant des données de plus de 255 caractères
    3. Mettre en place un système qui se connecte soit en PDO & ODBC, soit en ODBC, selon si les requêtes utilisent ou non de telles rubriques


    Voili voilou, et si quelqu'un trouve une meilleure solution, je suis preneur

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2006
    Messages : 28
    Points : 31
    Points
    31
    Par défaut Du nouveau ?
    Bonjour Mickaël,

    Je suis confronté à la même problématique que toi à savoir que je tape une BDD HFSQL C/S via des scripts PHP (en vue d'élaborer des api) et les rubriques mémo sont destroy .

    La base que je dois attaquer est celle d'une CRM que nous utilisons et je ne me sens pas de faire des modifs de structure au risque de tout péter pour mes utilisateurs.

    As-tu trouvé une solution plus "propre" ?

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

Discussions similaires

  1. [AC-2007] Texte tronqué à 255 caractères quand passage par VBA
    Par sendme dans le forum VBA Access
    Réponses: 2
    Dernier message: 13/05/2011, 17h49
  2. Réponses: 4
    Dernier message: 25/07/2010, 17h33
  3. [D5] Colonne varchar tronquée à 255 caractères
    Par PlayerOne dans le forum Bases de données
    Réponses: 5
    Dernier message: 16/10/2009, 14h32
  4. Réponses: 6
    Dernier message: 31/07/2009, 14h45
  5. [Publipostage]texte tronqué à 255 caractères
    Par Eruil dans le forum Excel
    Réponses: 2
    Dernier message: 20/12/2007, 14h30

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