PHP odbc_result() 似乎正在为 5.5+ 中的 varchar 字段返回随机未初始化的内存;在 5.4 中工作的相同代码
PHP odbc_result() appears to be returning random uninitialized memory for varchar fields in 5.5+; identical code working in 5.4
我正在使用 ODBC 连接在 Windows 服务器上检索数据。 PHP 从 5.4 升级到 5.6(以及 5.5)后,所有 varchar 字段似乎都返回随机未初始化的内存,尽管字符串长度与被查询字段的长度匹配。
例如,查询在 5.4 中返回字符串 "Test.txt" returns 在 5.5+ 中返回以下内容:
我比较了两个版本之间的 php.ini
设置,它们在与字符集和 ODBC 设置相关的具体内容方面似乎相同。
我可以 运行 同时在同一个 ODBC 资源上并排使用两个版本并获得这些结果。日期和整数等非 varchar 字段打印正确。我只是 运行ning 从 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);
}
http://bugs.php.net 中存在一些与 odbc 函数结果中出现的未初始化数据相关的错误。它们主要用于 php 的旧版本(例如 5.3)。这似乎就是这种情况下发生的情况,或者其中的一些变体。
在 5.6 中切换到 PDO 已经完全解决了我的问题。
我正在使用 ODBC 连接在 Windows 服务器上检索数据。 PHP 从 5.4 升级到 5.6(以及 5.5)后,所有 varchar 字段似乎都返回随机未初始化的内存,尽管字符串长度与被查询字段的长度匹配。
例如,查询在 5.4 中返回字符串 "Test.txt" returns 在 5.5+ 中返回以下内容:
我比较了两个版本之间的 php.ini
设置,它们在与字符集和 ODBC 设置相关的具体内容方面似乎相同。
我可以 运行 同时在同一个 ODBC 资源上并排使用两个版本并获得这些结果。日期和整数等非 varchar 字段打印正确。我只是 运行ning 从 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);
}
http://bugs.php.net 中存在一些与 odbc 函数结果中出现的未初始化数据相关的错误。它们主要用于 php 的旧版本(例如 5.3)。这似乎就是这种情况下发生的情况,或者其中的一些变体。
在 5.6 中切换到 PDO 已经完全解决了我的问题。