Данные, усеченные до 256-го символа — PHP с базой данных HFSQL, с использованием PDO ODBC pilot

Я создаю веб-сайт с PHP и HyperFileSQL на основе PDO & ODBC для связи.
Я использую версию 7.1.9 PHP и работаю под WampServer.
Но У меня проблема с получением текстовых данных длиной более 255 символов : данные усекаются и некоторые случайные символы появляются в конце.

Я нашел несколько сообщений об этой проблеме, например:

Итак, вот мой код:
1) PHP:

// Configuration de la connexion à la BDD --- Configuration of the connection to the database
$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 --- Connection to the database
$bdd = new PDO($dsn, '', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

// Initialisation de la requête --- SQL initialisation
$sql        = 'SELECT CorpsHTML FROM T_ModeleEmail WHERE T_ModeleEmail.IDModeleEmail = :IDModeleEmail';
$requete    = $this->getBDD()->prepare($sql);

// Affectation des paramètres --- Bindings
$tmpIDModeleEmail = 2;
$requete->bindValue(':IDModeleEmail', $tmpIDModeleEmail, PDO::PARAM_INT);

// Exécution de la requête --- SQL execution
$requete->execute();

// Récupération du 1er résultat --- Results parsing
$donnees = $requete->fetch(PDO::FETCH_ASSOC);

var_dump($donnees);

// On libère la requête --- Unallocate the request
$requete->closeCursor();

// On vérifie qu'on a bien trouvé un modèle email --- email model found
if(!empty($donnees)){
// Renvoi de l'objet trouvé après hydratation --- Returns the object found
return new ModeleEmail($donnees);
}else{
return null;
}
}catch(PDOException $e){
// Gestion des exceptions : arrête le script s'il y a une erreur --- Issue with PDO
die('Impossible de se connecter aux données du site. [Code de l\'erreur : '. $e->getCode() . '] Détails : ' . utf8_encode($e -> getMessage()));
}

2) Вот запись, которую я пытаюсь отобразить (8 байт), обрезанная до 256-го символа при отображении:

<html><head><title>Activation de votre compte</title></head><body>Ceci est un texte supérieur à 255 caractères, et qui n'est par conséquent par récupéré entièrement, bien que ce soit stocké dans un mémo texte ! Cela semble provenir d'un ancien bug de PDO, mais tous les forums ne parlent que de MSSQL Server, et aucun ne parle d'une solution pour PDO ODBC.</body></html>

3) И результат отображается:

array(1) {
["CorpsHTML"]=> string(370)
"<html><head><title>Activation de votre compte</title></head><body>Ceci est un texte sup�rieur � 255 caract�res, et qui n'est par cons�quent par r�cup�r� enti�rement, bien que ce soit stock� dans un m�mo texte ! Cela semble provenir d'un ancien bug de PDO,Zk���-o�����������xj������X7o��(0o������@o���"}

Для информации я нашел что-то во время отладки: когда я добавляю «bindColumn», полный текст, кажется, находится …:
PHP (альтернатива «bindColumn»):

// 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;

И результат … магия …

array(1) {
["CorpsHTML"]=>
string(115) " mais tous les forums ne parlent que de MSSQL Server, et aucun ne parle d'une solution pour PDO ODBC.</body></html>"}

TMP = <html><head><title>Activation de votre compte</title></head><body>Ceci est un texte sup�rieur � 255 caract�res, et qui n'est par cons�quent par r�cup�r� enti�rement, bien que ce soit stock� dans un m�mo texte ! Cela semble provenir d'un ancien bug de PDO,Zk���,o�����������xj������X7o��(0o������@o���

Я что-то пропустил ? Должен ли я рассмотреть другой вариант, чем PDO? Или я должен перенести свою базу данных на MSSQL Server?

Большое спасибо заранее за вашу помощь!
Если что-то не понятно, я отредактирую свое сообщение, чтобы уточнить это.
Хорошего дня,
Микаэль

РЕДАКТИРОВАТЬ — РЕШЕНИЕ
Ну что ж, Я нашел альтернативное решение, грязно … но работает
—> Преобразовать тип данных из «ТЕКСТ» в «VARCHAR (10000)»
—> Используйте ODBC вместо PDO & ODBC
—> Настройте ваши DAO для использования ODBC или PDO & ODBC, в зависимости от того, есть ли в вашей таблице поля TEXT (где вы должны преобразовать их в VARCHAR (XXXX) или нет.
Я надеюсь, что это поможет тем же.
Тем не менее, я все еще отношусь к более чистому решению 🙂

2

Решение

Я нашел альтернативное решение, грязный … но работает:
—> Преобразовать тип данных из «ТЕКСТ» в «VARCHAR (10000)»
—> Используйте ODBC вместо PDO & ODBC
—> Настройте ваши DAO для использования ODBC или PDO & ODBC, в зависимости от того, есть ли в вашей таблице поля TEXT (где вы должны преобразовать их в VARCHAR (XXXX) или нет.

Я надеюсь, что это поможет тем же.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]