Php pdo_dblib sql server分页

Php pdo_dblib sql server分页,php,sql-server,pagination,declare,Php,Sql Server,Pagination,Declare,我可以对sql server执行如下查询: DECLARE @ROWS INT = 2, @PAGE INT = 2 SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY ID) AS _NO FROM [Reports].[dbo].[Cycle] ) AS SOD WHERE SOD._NO BETWEEN ((@PAGE-1)*@ROWS)+1 AND @ROWS*(@PAGE) GO 我得到的结果是: 但

我可以对sql server执行如下查询:

DECLARE @ROWS INT = 2, @PAGE INT = 2
SELECT *
FROM (
    SELECT *,
    ROW_NUMBER() OVER (ORDER BY ID) AS _NO
    FROM [Reports].[dbo].[Cycle] 
) AS SOD
WHERE SOD._NO BETWEEN ((@PAGE-1)*@ROWS)+1
AND @ROWS*(@PAGE)
GO
我得到的结果是:

但是,如果我试图通过dblib在pdo中这样做,它将不起作用:

            $stmt = $pdo->query("
    DECLARE @ROWS INT = 2, @PAGE INT = 2
    SELECT *
    FROM (
        SELECT *,
        ROW_NUMBER() OVER (ORDER BY ID) AS _NO
        FROM [Reports].[dbo].[Cycle] 
    ) AS SOD
    WHERE SOD._NO BETWEEN ((@PAGE-1)*@ROWS)+1
    AND @ROWS*(@PAGE)
    GO
    ");

            var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
错误代码:

PHP Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 102 General SQL Server error: Check messages from the SQL Server [102] (severity 15)
根据误差表说明误差:

是:


您正在声明变量、声明查询并执行它。虽然SQLServer能够按顺序解析这3个命令,但PDO正试图将这3个命令作为单个命令发送。此外,您正在使用查询运算符。您可以尝试用分号分隔这3个部分,并使用exec运算符。->exec()不会改变任何内容,因为它只返回行数,而不是statemetn对象,执行方式与查询中相同$stmt=$pdo->exec(“声明\@ROWS INT=2,\@PAGE INT=2;选择*FROM(选择*,ROW_NUMBER())OVER(按ID排序)作为从[Reports].[dbo].[Cycle]中的.\u NO介于(\@PAGE-1)*\@ROWS)+1和\@ROWS*(\@PAGE);GO”)之间);打印($stmt->fetchAll(PDO::FETCH_ASSOC));错误:PHP致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[HY000]:一般错误:102一般SQL…你有道理。我仍然相信查询将无法解析3个连续命令。你试过分号吗?
Incorrect syntax near '%.*ls'.