我正在使用ODBC连接来检索Windows Server上的数据。将PHP从5.4升级到5.6(以及5.5)之后,所有varchar字段似乎都会返回随机未初始化的内存,尽管字符串长度与正在查询的字段的长度匹配。
例如,在5.4中返回字符串“Test.txt”的查询将在5.5 +中返回以下内容:
我比较了两个版本之间的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);
}
答案 0 :(得分:5)
在http://bugs.php.net中有一些与odbc函数结果中出现的未初始化数据相关的错误。它们主要用于较旧的(例如5.3)版本的php。这似乎是在这种情况下发生的事情,或其中的一些变体。
在5.6中切换到PDO已完全解决了我的问题。