【问题标题】:pdo binding asc/desc order dynamicallypdo 动态绑定 asc/desc 顺序
【发布时间】:2010-12-14 00:02:03
【问题描述】:

假设我有 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);

【问题讨论】:

    标签: php mysql database pdo


    【解决方案1】:

    我所做的是在 $_session 中创建一个名为“task_order”的变量,并将其默认设置为 0。然后,在 sql 语句中,我调用一个私有函数/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";
    }  
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-09
        • 2021-08-27
        • 1970-01-01
        • 2021-09-21
        • 2012-01-18
        • 2015-03-05
        相关资源
        最近更新 更多