经过 2 天的战斗,我尝试在这里寻求帮助。我在 CentOS 5.4 服务器上使用 unixODBC (2.2.11) 来处理 DB2 (iSeries) 和 PHP (5.3)。我想这是因为 PHP 从 5.1 升级到 5.3,我让 PHP 在某些查询上出现段错误。经过一些调查,我发现问题出现在一些长字符字段的查询中,例如这张表:
TABLE (
CONTRACTID NUMERIC,
SOMETEXT CHAR(583)
)
这段简单的代码引发了段错误:
try {
$conn = new PDO("odbc:".$dsn, $username, $password, array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
);
}
catch (Exception $e) {
echo $e->getMessage();
}
$sql = 'SELECT * FROM LIB.TABLE ';
$stmt = $conn->prepare($sql);
$vals = $stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
是否有任何列长度限制或 unixODBC 和/或 PHP >= 5.1 的错误? 这个网络应用程序运行得很好,然后我遇到了这个问题..
顺便说一句,我用装有 unixODBC 2.2.14 和 PHP 5.3 的更新的 64 位 CentOS 6.2 机器进行了测试,问题是一样的。
非常感谢任何帮助,
谢谢
法比安
更新: 使用 PHP odbc 函数,它可以工作:
$conn = odbc_connect($dsn, $username, $password);
$res = odbc_exec($conn, $sql);
$rows = odbc_fetch_array($res);
所以问题更多地与 PDO 相关,知道吗?
最佳答案
这里遇到了同样的问题。发现 64 位 php-odbc 模块在返回具有 NULL 值的字段时导致段错误。解决方法是合并每个可能存在 NULL 值的字段。这不是一个好的解决方案。我正在查看 php-odbc.c 代码,但我不能保证一定会修复。
解决方法: SELECT COALESCE(CHAR(fieldname),'') FROM ...
我想我要用 32 位版本替换此服务器。我有其他的工作得很好。
关于php - 使用 unixODBC (DB2) + PHP + CentOS 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10927983/