pdo动态绑定asc / desc顺序

时间:2009-11-06 20:44:38

标签: php mysql database pdo

假设我有2个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 个答案:

答案 0 :(得分:6)

没有。参数自动引用,不应引用ASC / DESC。这与表和列名称不能是参数的原因相同。

答案 1 :(得分:0)

我所做的是在$ _session中创建一个名为“task_order”的变量,默认情况下将其设置为0。然后,在sql语句中,我调用一个private function / switch语句,确定是否应该将ASC或DESC添加到sql语句中。如果它为0,则返回“ASC”并将“task_order”设置为1.如果为1,则表示相反。所以它就像一个“切换”机制。

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

编辑:发现了一些旧代码:

$ sql =“SELECT * FROM tasks WHERE owner =?ORDER BY priority”。 $ this-> check_sort_status()。 “”;

我打电话的方法是:

public function check_sort_status() {

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