首页 > 解决方案 > Zend DB Framework3 SQL Server 选择限制

问题描述

我正在使用 Zend DB SQL Abstraction 来查询几个不同的数据库。在大多数情况下,我可以为 select 语句添加限制,但它不适用于 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 Driver 17 for SQL Server][SQL Server]'LIMIT' 附近的语法不正确。)

当我输出$select->getSqlString($db->getPlatform())我得到

SELECT [字段名] FROM [表名] WHERE [where 子句] LIMIT 10

当我期待

SELECT TOP 10 [字段名称] FROM [表名称] WHERE [where 子句]

我在这方面缺少什么?

标签: sql-serverphp-7zend-dbzend-framework3

解决方案


推荐阅读