在我的mvc应用程序中,我使用以下查询来选择一些数据。我没有使用存储过程
select recordID,ChannelID,UserID ,StartTime ,Duration,SeqNum from result WHERE SeqNum = ?pSeqNum
ORDER BY StartTime DESC limit ?pStartIndex, ?pRecordsPerPage;
我会将值传递给LIMT。它的工作正常。
现在我给了用户选择条件顺序的选项(用户从recordID,ChannelID,UserID,StartTime,Duration中选择一个)。 所以我试过以下代码。
select recordID,ChannelID,UserID ,StartTime ,Duration,SeqNum from result WHERE SeqNum = ?pSeqNum
ORDER BY ?pOrderBy DESC limit ?pStartIndex, ?pRecordsPerPage;
当我传递给pStartIndex和pRecordsPerPage时,我传递了pOrderBy的值。 但它不工作的顺序。它只能通过
选择没有订单的数据答案 0 :(得分:3)
这是因为ORDER BY
使用数据库标识符(即列,别名或表达式)。您将该值作为参数传递。
换句话说,生成的查询将等同于
... ORDER BY 'StartTime' ...
如果根据已知的一组值(即可用列)验证用户输入,则可以简单地将值插入查询字符串,例如(非常粗略)
$orderBy = $_GET['order_by'];
if (!in_array($orderBy, $orderableColumns)) {
throw new Exception('Invalid "order by" specified');
}
$query = sprintf('... ORDER BY `%s` ...', $orderBy);
答案 1 :(得分:2)
我不相信order by
子句可以参数化。绝对不是在Oracle中,不是100%肯定MySQL。
答案 2 :(得分:0)
您可以根据参数使用new Cesium.PositionPropertyArray([])
条件来SELECT
排序列,为其命名,然后按该列排序。
CASE WHEN
我们将在结果中增加一列,但我认为它不会从索引列中受益,这会降低查询速度,但它可以工作。