php - 使用 unixODBC (DB2) + PHP + CentOS 的段错误

标签 php pdo segmentation-fault centos unixodbc

经过 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/

相关文章:

javascript - 使用ajax将数据发送到php页面并获取响应并显示在字段中

php - php中的交替和彩色线条

php - Phalcon pdo 异常模型优先

multithreading - 在多线程(使用克隆)程序中调试段错误

c++ - 段错误 - vector 字符串 - multimap 实现

php - 在php中使用自动增量创建100个变量

PHP:准备 PDO 数据库语句的更简洁方法?

mysql - 如果 mysql 列有数据,则返回 1 或 0

compiler-errors - Xcode 10 编译时错误 :Segmentation fault 11

php - 处理、解析和流式传输大型文本文件的实用方法是什么?