【问题标题】:query will not order [duplicate]查询不会排序[重复]
【发布时间】:2020-03-18 23:00:15
【问题描述】:

我有这个方法

public function getArticles($order){
        $stmt = $this->db->prepare("SELECT * FROM articles ORDER BY :order");
        $stmt->bindParam('order',$order);
        $stmt->execute();
        $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
        return $results;
    }

我是这样打电话的

$articles->getArticles('created DESC');

但是当我尝试执行“创建 ASC”时,它不会更改顺序吗? 我尝试使用两个 $vars 并在列周围使用 backtics,但我无法让它工作,而且我没有遇到任何错误,它只是每次都以相同的顺序拉动行。

https://phpdelusions.net/pdo找到解决方案

$orders  = ["name","price","qty"];
$key     = array_search($_GET['sort'], $orders);
$orderby = $orders[$key];
$direction = _GET['direction'] == 'DESC' ? 'DESC' : 'ASC';
$query   = "SELECT * FROM `table` ORDER BY $orderby $direction";

【问题讨论】:

  • 为什么这被标记为“mysqli”和“pdo”?这是两种不同的动物。
  • 这显然是 PDO.. 我删除了 mysqli 标签。
  • 那将是“两者”。 @FelippeDuarte 用来标记它的那个,也是我选择的那个。

标签: php mysql pdo


【解决方案1】:

您的查询使用绑定变量来命名列。 You Can't Do That™。

列名,包括ORDER BY 子句中的列名,必须指定为查询文本的一部分。

【讨论】:

  • 感谢您的提示,我在 Google 上搜索并在 phpdelusions.net/pdo 上找到了正确的方法。
猜你喜欢
  • 1970-01-01
  • 2015-03-03
  • 2017-04-12
  • 2011-04-03
  • 2020-01-11
  • 1970-01-01
  • 2015-06-12
  • 2014-02-19
  • 1970-01-01
相关资源
最近更新 更多