代码之家  ›  专栏  ›  技术社区  ›  Chris

PDO动态绑定asc/desc顺序

  •  3
  • Chris  · 技术社区  · 16 年前

    假设我有两个PDO语句,它们的顺序不同(asc和desc)

    $stmt1 = $po->prepare("SELECT * FROM tabname WHERE categ=:categ ORDER BY field1 DESC");
    $stmt2 = $po->prepare("SELECT * FROM tabname WHERE categ=:categ ORDER BY field1 ASC");
    

    有没有方法可以动态绑定asc/desc,这样我只能有1个 stmt

    $order = "ASC"; //or "DESC"
    
    $stmt = $po->prepare("SELECT * FROM tabname WHERE categ=:categ ORDER BY field1 order=:order");
    $stmt->bindParam(':order', $order, PDO::PARAM_STR);
    
    2 回复  |  直到 13 年前
        1
  •  6
  •   longneck    16 年前

    否。参数自动引用,不应引用asc/desc。这与表名和列名不能是参数的原因相同。

        2
  •  0
  •   Evaldas Raisutis    13 年前

    我所做的是在$\u会话中创建一个名为“task\u order”的变量,并在默认情况下将其设置为0。然后,在SQL语句中,我调用一个私有的函数/switch语句,该语句确定是否应将asc或desc添加到SQL语句中。如果为0,则返回“asc”,并将“task\u order”设置为1。如果是1,则相反。所以它就像一个“切换”机制。

    我知道这是一个古老的问题/主题,但我偶然发现它正在搜索,所以也许其他人也会。如果你有更好的主意,请分享!

    编辑:找到一些旧代码:

    $sql=“select*from tasks when owner=?按优先级排序”。$this->检查_sort_status()。;

    我调用的方法是:

    public function check_sort_status() {
    
     switch ($_SESSION["asc"]) {
        case 0:
            $_SESSION["asc"] = 1;
            return "ASC";
        case 1:
            $_SESSION["asc"] = 0;
            return "DESC";
    }