3 pièce(s) jointe(s)
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:
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 :
Pièce jointe 372641
3) Le résultat affiché :
Pièce jointe 372645
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 :lol:
Le code PHP (ajout d'un "bindColumn") :
Code:
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 :
Pièce jointe 372649
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