首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在第256字符处截断数据-使用HFSQL数据库的PHP,使用PDO引导

在第256字符处截断数据-使用HFSQL数据库的PHP,使用PDO引导
EN

Stack Overflow用户
提问于 2018-04-24 12:22:42
回答 1查看 395关注 0票数 3

我正在为连接创建一个基于PDO & ODBC的PHP和HyperFileSQL的HyperFileSQL。

我正在使用PHP7.1.9版本,并在WampServer下工作。

但是I在检索超过255个字符的文本数据时遇到了一个问题:数据被截断,和一些随机字符出现在末尾。

我找到了一些关于这个问题的帖子,如:

下面是我的代码:

1) PHP :

代码语言:javascript
复制
// 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字符处截断:

代码语言:javascript
复制
<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)并显示结果:

代码语言:javascript
复制
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“选项) :

代码语言:javascript
复制
// 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;

结果是..。魔法..。:

代码语言:javascript
复制
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?

非常感谢您的帮助!

如果有什么不清楚,我会编辑我的信息,以澄清它。

祝你今天愉快,

米卡埃尔

编辑-解决方案哦,好吧,我找到了另一个解决方案,肮脏.但工作:

->将数据类型从"TEXT“转换为"VARCHAR(10000)”

->使用ODBC代替PDO和ODBC

->将DAO配置为使用ODBC或PDO & ODBC,这取决于表中是否有文本字段(必须将它们转换为VARCHAR(XXXX) )。

我希望这会对同样情况下的人有所帮助。

尽管如此,我仍然希望找到一个更干净的解决方案:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-25 12:26:32

我找到了另一个解决办法,肮脏.但工作:

->将数据类型从"TEXT“转换为"VARCHAR(10000)”

->使用ODBC代替PDO和ODBC

->将DAO配置为使用ODBC或PDO & ODBC,这取决于表中是否有文本字段(必须将它们转换为VARCHAR(XXXX) )。

我希望这会对同样情况下的人有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50001593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档