Php pdo_dblib sql server分页
我可以对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 我得到的结果是: 但
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'.