Zend DB Framework3 SQL Server Выберите предел - PullRequest
0 голосов
/ 30 ноября 2018

Я использую Zend DB SQL Abstraction для запроса нескольких разных баз данных.В большинстве из них я могу добавить ограничение к оператору выбора, но он не работает на SQL Server.

$limit = 10; // this is actually coming in from the calling code
$options = array(
  'driver' => 'sqlsrv',
  'hostname' => '<hostname>',
  'database' => '<schema>',
  'username' => '<username>',
  'password' => '<password>',
);
$db = new Zend\Db\Adapter\Adapter($options);
$sql = new Zend\Db\Sql\Sql($db);
$select = $sql->select(<table name>);
$select->columns([<columns>]);
$where = new \Zend\Db\Sql\Where(<zero or more where statements>);
$select->where($where);
if($limit > 0) {
  $select->limit($limit);
}
$statement = $sql->prepareStatementForSqlObject($select);
$results = $statement->execute();

Когда я запускаю это, я получаю сообщение об ошибке

Заявлениене удалось выполнить (42000 - 102 - [Microsoft] [Драйвер ODBC 17 для SQL Server] [SQL Server] Неверный синтаксис рядом с «LIMIT».)

Когда я вывожу $select->getSqlString($db->getPlatform()), я получаю

SELECT [имена полей] FROM [имя таблицы] WHERE [где предложения] LIMIT 10

, когда я ожидаю

SELECT TOP 10[имена полей] ОТ [имя таблицы] ГДЕ [где пункты]

Чего мне не хватает в этом?

...