在我的mvc应用程序中,我使用以下查询来选择一些数据

 select recordID,ChannelID,UserID ,StartTime ,Duration,SeqNum from result  WHERE SeqNum = ?pSeqNum
             ORDER BY StartTime  DESC limit ?pStartIndex, ?pRecordsPerPage;

我将把值传递给LIMT。而且效果很好。
现在我给了用户一个选项来选择order by条件(用户从recordID、ChannelID、UserID、StartTime、Duration中选择一个)。
所以o试着遵循代码。
 select recordID,ChannelID,UserID ,StartTime ,Duration,SeqNum from result  WHERE SeqNum = ?pSeqNum
             ORDER BY ?pOrderBy  DESC limit ?pStartIndex, ?pRecordsPerPage;

在传递pStartIndex和pRecordsPerPage时,我传递了pOrderBy的值。
但这不是正常的。它只选择没有顺序的数据

最佳答案

这是因为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);

08-26 17:38