假设我有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);
答案 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";
}