PDO SQLSRV 为 SELECT 使用 bindValue TOP
PDO SQLSRV Using bindValue for SELECT TOP
我正在尝试使用 PDO SQLSRV 来 select 来自具有限制 (TOP) 的 table 的数据。但是,当我这样做时。
$limit = 20;
$sql = "SELECT TOP :rowsLimit * FROM TABLE ORDER BY id DESC";
$query = $this->db->prepare($sql);
$parameters = array(':rowsLimit' => $limit);
$query->execute($parameters);
我收到这样的错误。
Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 102 [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Incorrect syntax near '@P1'.
我什至尝试删除参数并改为添加 bindValue,但即使使用其中任何一个,也会出现相同的错误。
$query->bindValue(':rowsLimit', (int) trim($limit), PDO::PARAM_INT);
或
$query->bindValue(':rowsLimit', intval(trim($limit)), PDO::PARAM_INT);
那么如何为 PDO SQLSRV 中的 TOP 绑定参数?
您不能为 TOP
值使用参数,但有一个解决该问题的方法。
您需要做的是使用 ROW_NUMBER() OVER()
语法并手动过滤掉前 @x
行。
我正在尝试使用 PDO SQLSRV 来 select 来自具有限制 (TOP) 的 table 的数据。但是,当我这样做时。
$limit = 20;
$sql = "SELECT TOP :rowsLimit * FROM TABLE ORDER BY id DESC";
$query = $this->db->prepare($sql);
$parameters = array(':rowsLimit' => $limit);
$query->execute($parameters);
我收到这样的错误。
Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 102 [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Incorrect syntax near '@P1'.
我什至尝试删除参数并改为添加 bindValue,但即使使用其中任何一个,也会出现相同的错误。
$query->bindValue(':rowsLimit', (int) trim($limit), PDO::PARAM_INT);
或
$query->bindValue(':rowsLimit', intval(trim($limit)), PDO::PARAM_INT);
那么如何为 PDO SQLSRV 中的 TOP 绑定参数?
您不能为 TOP
值使用参数,但有一个解决该问题的方法。
您需要做的是使用 ROW_NUMBER() OVER()
语法并手动过滤掉前 @x
行。