php - 将 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)
但是如果将列名替换为*
,则没有错误。整个结果集作为数组返回。但是,对于我们的用例,我们希望能够指定列,因为解析结果集是不必要的开销。
我已经搜索了类似的问题,但没有取得很大成功。任何帮助将不胜感激。请询问您是否需要更多详细信息。
解决方案
推荐阅读
- git - Git:有一个文件显示它是否已更改,无论我是否删除它,我怎样才能让它保持不变?
- java - 在 JList 中显示文件对象的简单名称
- c - 链表 - 命令行参数
- python - 在无 Internet 的服务器上复制 python Anaconda 库
- javascript - 如果我不调用调度,我的动作是如何调度的?
- php - 从 url 获取元标记的替代方法
- f#-giraffe - 在视图中显示整数
- docker - Airflow Docker Operator 无法在本地机器上找到 .sock 文件
- mysql - 在时间序列数据表中为每个 ID 子组添加缺失的日期记录
- plugins - 错误:在项目同步之前无法运行配置