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

时间:2016-06-10 19:51:45

标签: php character-encoding odbc

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

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

garbled

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

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

我还可以配置什么来尝试解决此问题?

编辑:我正在使用统一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);
}

1 个答案:

答案 0 :(得分:5)

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

在5.6中切换到PDO已完全解决了我的问题。