Запрос ZF2 TableGateway, возвращающий пустой набор результатов, запрос адаптера работает - PullRequest
0 голосов
/ 11 мая 2018

Я переместил приложение между серверами.

От:

  • Windows 2008 R2
  • ISS 6.1
  • PHP 5.4.11
  • SQL Server 10
  • ZF 2,4

Кому:

  • Windows10
  • PHP встроенный сервер
  • PHP 7.2.5
  • SQL Server 14
  • ZF 2.4

НижеTableGateway selectWith() возвращает пустой набор результатов, но когда тот же $select запрашивается через Adapter->query(), он работает как ожидалось.На предыдущем сервере все работало нормально.TableGateway selectWith() является исходным кодом и должен работать.Кроме номеров версий выше ничего не изменилось.

    $select = $this->tableGateway->getSql()->select()->where(array(
        'col1 = ?' => $input
    ));

    // via selectWith
    $resultSet = $this->tableGateway->selectWith($select);

    // via query
    $selectString = $this->tableGateway->getSql()->buildSqlString($select);
    $adapter = $this->tableGateway->getAdapter();
    $results = $adapter->query($selectString, $adapter::QUERY_MODE_EXECUTE);

    // works
    var_dump($results->current());
    // doesn't work
    var_dump($resultSet->current());

Обновление:

$select = $this->tableGateway->getSql()->select()->where(array(
   'col1 = \''.$input.'\''
));

Приведенный выше код работает.Так что проблема должна быть в том, как TableGateway выбирает заполнитель и замены.Я перепробовал все варианты в документах, и они должны работать, но не работают.

Дальнейшее обновление:

Очевидно, что одно из этих применений sqlsrv_query идругое использование sqlsrv_execute.Я прошел через библиотеку, и должна быть проблема с тем, как она связывает параметры с sqlsrv_prepare, но я еще не до конца понял.sqlsrv_prepare требует передачи по ссылке.Я подозреваю, что ошибка заключается в несовместимости с этим критическим изменением между 5.6 и 7.

1 Ответ

0 голосов
/ 15 мая 2018

Проблема в том, что ZF2 несовместим с PHP> 5.6. В этом случае API для sqlsrv стал более строгим из-за устаревания «передачи по времени вызова». Решение состоит в том, чтобы придерживаться PHP 5.6 или рефакторинга большого количества кода.

...