如何使用准备好的语句通过 PDO sqlsrv 设置获取和偏移值?

我正在尝试使用准备好的语句使用参数传递值来设置偏移量和限制(下一行):


$statement = $pdo->prepare('SELECT * FROM livro ORDER BY id OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY');

$statement->execute(['offset' => 0, 'limit' => 5]);

$livro = $statement->fetch();

错误返回:


为 TOP 或 FETCH 子句行计数参数提供的行数必须是整数。


但如果我尝试硬编码:


$statement = $pdo->prepare('SELECT * FROM livro ORDER BY id OFFSET 0 ROWS FETCH NEXT 5 ROWS ONLY');

$statement->execute();

$livro = $statement->fetch();

效果很好我知道使用 mysql 有必要使用PDO::ATTR_EMULATE_PREPARES   => false限制工作。但我尝试使用 sqlsrv 并出现错误:


给定的属性仅在 PDOStatement 对象上受支持


有没有办法使用准备好的语句通过 PDO sqlsrv 设置获取和偏移值?


我的环境:Windows 10、PHP 7.3、MSSQL 2014


慕雪6442864
浏览 179回答 2
2回答

蝴蝶刀刀

试试这个:$statement = $pdo->prepare('SELECT * FROM livro ORDER BY id OFFSET CAST(:offset AS INT) ROWS FETCH NEXT CAST(:limit AS INT) ROWS ONLY');$statement->execute(['offset' => 0, 'limit' => 5]);$livro = $statement->fetch();
打开App,查看更多内容
随时随地看视频慕课网APP