PHP odbc_result()似乎为5.5+中的varchar字段返回随机未初始化的内存; 相同的代码在5.4中工作

Cha*_*ser 5 php odbc character-encoding

我正在使用ODBC连接来检索Windows Server上的数据.将PHP从5.4升级到5.6(以及5.5)后,所有varchar字段似乎都返回随机未初始化的内存,尽管字符串长度与正在查询的字段的长度匹配.

例如,在5.4中返回字符串"Test.txt"的查询将在5.5+中返回以下内容:

乱码

我已经比较php.ini了两个版本之间的设置,它们在与charsets和ODBC设置有关的具体内容方面似乎是相同的.

我可以在同一个ODBC资源上同时运行这两个版本并获得这些结果.日期和整数等非varchar字段正确打印.我只是运行php.exehttp://windows.php.net/download下载的用于5.4,5.5和5.6 的x86线程安全可执行文件.

我可以配置什么来尝试解决这个问题?

编辑:我正在使用统一ODBC函数,如下所示:

$o = odbc_connect("Driver=MMODBC;Server=localhost;Database=odbc_mapping;", [user], [pass]);
$r = odbc_exec($o, "SELECT * FROM Table");
while (odbc_fetch_row($r)) {
    print odbc_result($r, 1);
}
Run Code Online (Sandbox Code Playgroud)

Cha*_*ser 5

http://bugs.php.net上有一些与odbc函数结果中出现的未初始化数据相关的错误.它们主要用于较旧(例如5.3)版本的php.这似乎是在这种情况下发生的事情,或其中的一些变体.

在5.6中切换到PDO已经彻底解决了我的问题.