【发布时间】:2015-09-12 08:30:33
【问题描述】:
对于带有排序顺序的 SELECT 查询,我准备了以下语句:
$direction = 'DESC';
$project_id = 1;
$query = $this->connection->prepare('SELECT text FROM marker WHERE project_id = :project_id ORDER BY time :direction');
$query->bindValue(':project_id', $project_id, PDO::PARAM_INT);
$query->bindValue(':order', $direction, PDO::PARAM_STR);
$success = $query->execute();
但它失败了。所以我准备了这个声明:
$query = $this->connection->prepare('SELECT text FROM marker WHERE project_id = :project_id ORDER BY time '.$direction.'');
$query->bindValue(':project_id', $project_id, PDO::PARAM_INT);
$success = $query->execute();
而且它有效。
不能绑定一个 ORDER 属性吗? 如何正确绑定 ORDER 属性?
【问题讨论】:
-
见手册
[ORDER BY {col_name | expr | position} [ASC | DESC], ...]你不能用变量传递方向 -
我刚刚快速浏览了链接。对于一个简单的方法来说,它看起来相当复杂。如上所述,当我在 SELECT 语句中使用 $direction var 时,它可以工作。但我认为它关于 sql 注入的编码不好。所以我的问题是如何正确地做到这一点?
-
您可以在 PHP 中使用 IF 语句,但它会复制代码或将变量传递给表达式,该表达式将用于订购我上面提供的链接