尝试写一个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 子句”并且有效!