【问题标题】:PDO SQLSRV Using bindValue for SELECT TOPPDO SQLSRV 为 SELECT TOP 使用 bindValue
【发布时间】:2015-10-08 00:02:36
【问题描述】:

我正在尝试使用 PDO SQLSRV 从具有限制 (TOP) 的表中选择数据。但是,当我这样做时。

$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 绑定一个参数呢?

【问题讨论】:

  • 表名和列名不能被 PDO 中的参数替换。查看此link 了解更多详情
  • @Saty 我明白了。谢谢。

标签: php pdo parameters bindvalue


【解决方案1】:

您不能为 TOP 值使用参数,但有解决该问题的方法。

您需要做的是使用ROW_NUMBER() OVER() 语法并手动过滤掉顶部的@x 行。

See the sqlfiddle for an example.

【讨论】:

    猜你喜欢
    • 2014-05-08
    • 2017-08-29
    • 2011-04-13
    • 2014-07-28
    • 2015-04-29
    • 2014-01-26
    • 2013-01-03
    • 2011-02-11
    相关资源
    最近更新 更多