首页 > 解决方案 > 将 PHP 5.6 升级到 7.1 时 PHP PDO ODBC 扩展出现问题

问题描述

我们有一个使用 PHP 5.6 的设置。我们使用 Apache Ignite 数据网格进行缓存。我们在 unixODBC 上使用 PDO(pdo_odbc) 在 ignite 缓存上执行 sql 查询。代码如下,

$res = $this->connection()->query($selectQuery)->fetchAll(\PDO::FETCH_COLUMN);

在这里,connection()函数返回一个 PDO 对象。SQL 格式如下,

SELECT stu.name FROM "StudentCache".Student AS stu WHERE stu.is_qualified = \'1\' ORDER BY name ASC LIMIT 40 OFFSET 0

该代码在 PHP 5.6 部署中运行良好。该代码返回列值的数组。默认情况下,FETCH_COLUMN返回第一列(在我们的例子中只有一个)。

问题

现在的问题是,当我将 php 升级到 7.1 时,同一段代码正在引发 pdo 异常。以下是确切的错误,

SQLSTATE[SL009]: <<Unknown error>>: 0 [unixODBC][Driver Manager]No columns were bound prior to calling SQLFetch or SQLFetchScroll (SQLFetchScroll[0] at /home/buildozer/aports/community/php7/src/php-7.1.17/ext/pdo_odbc/odbc_stmt.c:559)

但是如果将列名替换为*,则没有错误。整个结果集作为数组返回。但是,对于我们的用例,我们希望能够指定列,因为解析结果集是不必要的开销。

我已经搜索了类似的问题,但没有取得很大成功。任何帮助将不胜感激。请询问您是否需要更多详细信息。

标签: phppdoodbcigniteunixodbc

解决方案


推荐阅读