Я переместил приложение между серверами.
От:
- 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.