PDO ODBC 错误仅重置连接

PDO ODBC 错误仅重置连接

尝试写一个CakePHP 的 ODBC PDO 驱动程序。似乎我越来越接近了,但是每当调用它不喜欢的 PDO 函数时,连接就会立即重置,我无法获得任何错误信息。我想这可能是一个可能的配置设置,但我找不到任何东西。我不知道这是否有帮助,但这是我正在使用的特定代码片段:

public function fetchResult() {
    debug($this->_result);
    if ($row = $this->_result->fetch()) { // ### HERE IS WHERE IT RESETS ###
        debug($this->_connection->errorInfo());
        exit;
        $resultRow = array();
        foreach ($this->map as $col => $meta) {
            list($table, $column, $type) = $meta;
            if ($table === 0 && $column === self::ROW_COUNTER) {
                continue;
            }
            $resultRow[$table][$column] = $row[$col];
            if ($type === 'boolean' && !is_null($row[$col])) {
                $resultRow[$table][$column] = $this->boolean($resultRow[$table][$column]);
            }
        }
        return $resultRow;
    }
    $this->_result->closeCursor();
    return false;
}

这种方法和原始 CakePHP fetchResult 函数是我没有传递这个PDO::FETCH_NUM论点,但无论哪种方式仍然不起作用!

答案1

还有更深层次的问题。

我确信这是一个错误:https://bugs.php.net/bug.php?id=64483

答案2

我遇到了类似的问题。请尝试检查错误日志以查找以下内容:

[通知] 子进程 pid 16759 退出信号 段错误 (11)

我没有尝试使用 PDO,但使用 ODBC 时也会崩溃。只有当 SQL 语句返回 null 时才会发生这种情况。有人建议使用 COALESCE(field, '') 返回空字符串,但这是一个荒谬的解决方法。此外,PHP 中也有一个与此相关的错误,看起来 null 错误是在 5.3.11 中得到纠正的。我现在的问题似乎是 64 位和 32 位软件不匹配。另一件值得注意的事情是报告的错误仅限于 64 位。

链接:
LAMP 使用 ODBC 连接到 DB2
https://bugs.php.net/bug.php?id=59405
https://bugs.php.net/bug.php?id=54007

答案3

在我的例子中,问题是由于我的数据库包含带重音的非美国文本。将我的选择更改为“SELECT 字段整理 SQL_Latin1_General_CP1253_CI_AIFROM 数据库 WHERE 子句”并且有效!

相关内容