ZF2 TableGateway 查询返回空结果集,适配器查询有效

ZF2 TableGateway query returning empty resultset, Adapter query works

我已经在服务器之间移动了一个应用程序。

发件人:

收件人:

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 或重构大量代码。