ZF2 TableGateway 查询返回空结果集,适配器查询有效
ZF2 TableGateway query returning empty resultset, Adapter query works
我已经在服务器之间移动了一个应用程序。
发件人:
- Windows 2008 R2
- 国际空间站 6.1
- PHP 5.4.11
- SQL 服务器 10
- ZF 2.4
收件人:
- Windows 10
- PHP内置服务器
- PHP 7.2.5
- SQL 服务器 14
- ZF 2.4
在 TableGateway
selectWith()
returns 下面是一个空结果集,但是当通过 Adapter->query()
查询相同的 $select
时,它按预期工作。它在以前的服务器上运行良好。 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 Select 占位符和替换方式上。我已经尝试了文档中的所有变体,它们应该可以工作但没有。
进一步更新:
显然其中一个使用 sqlsrv_query
,另一个使用 sqlsrv_execute
。我已经浏览过图书馆,它绑定参数到 sqlsrv_prepare
的方式肯定有问题,但我还没有深入了解它。 sqlsrv_prepare
需要通过引用传递。我怀疑该错误与 5.6 和 7 之间的重大更改不兼容。
这里的问题是 ZF2 与 PHP > 5.6 不兼容。在这种情况下,由于 "call-time pass-by-reference" 的弃用,sqlsrv 的 API 变得更加严格。解决方案是坚持使用 PHP 5.6 或重构大量代码。
我已经在服务器之间移动了一个应用程序。
发件人:
- Windows 2008 R2
- 国际空间站 6.1
- PHP 5.4.11
- SQL 服务器 10
- ZF 2.4
收件人:
- Windows 10
- PHP内置服务器
- PHP 7.2.5
- SQL 服务器 14
- ZF 2.4
在 TableGateway
selectWith()
returns 下面是一个空结果集,但是当通过 Adapter->query()
查询相同的 $select
时,它按预期工作。它在以前的服务器上运行良好。 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 Select 占位符和替换方式上。我已经尝试了文档中的所有变体,它们应该可以工作但没有。
进一步更新:
显然其中一个使用 sqlsrv_query
,另一个使用 sqlsrv_execute
。我已经浏览过图书馆,它绑定参数到 sqlsrv_prepare
的方式肯定有问题,但我还没有深入了解它。 sqlsrv_prepare
需要通过引用传递。我怀疑该错误与 5.6 和 7 之间的重大更改不兼容。
这里的问题是 ZF2 与 PHP > 5.6 不兼容。在这种情况下,由于 "call-time pass-by-reference" 的弃用,sqlsrv 的 API 变得更加严格。解决方案是坚持使用 PHP 5.6 或重构大量代码。