在我的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);