У нас есть настройка с PHP 5.6.Мы используем Apache Ignite datagrid для целей кэширования.Мы используем PDO (pdo_odbc) поверх unixODBC для выполнения 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)
Но если имя столбца заменить на *
, ошибки не будет.Весь набор результатов возвращается в виде массива.Однако для нашего варианта использования мы хотим иметь возможность указать столбец, так как при разборе результирующего набора нет ненужных накладных расходов.
Я искал похожие проблемы без особого успеха.Любая помощь будет принята с благодарностью.Пожалуйста, спросите, если вам нужно больше деталей.