0

所以我有一个区域,人们可以针对我的数据库编写自己的查询,但我想限制返回的结果(很像 PhpMyAdmin)。

所以我需要检查$_POST['query']是否有限制声明,如果有,请确保它低于 30,比如说。如果没有限制,我需要添加它。

我该怎么做?

4

2 回答 2

4

忽略风险......我认为最好的是将查询用作子查询并应用限制。所以你避免评估查询。

SELECT * 
FROM (
 SELECT * 
 FROM 'table'
 LIMIT 0 , 100
) AS query

LIMIT 0 , 30
于 2012-11-04T00:13:42.913 回答
1

您可以使用preg_*函数来检查查询并注入您的首选限制。

编辑:我完全忽略了LIMIT关键字的可能用途。这是编辑后的版本。

$query = 'SELECT * FROM aa LIMIT 100,20';
$limit = 20; // predefined max limit

// possibilities:
// LIMIT N[,N]
// LIMIT N OFFSET N

preg_match('~(?<=\blimit\s)\s*(?<limit>\d+)\s*(,\s*\d+|\soffset\s+\d+)?\s*$~i',$query,$limitStr);
if (isset($limitStr['limit'])) {
    $maxLimit = min((int)$limitStr['limit'],$limit);
    // user might have already limited it so this is
    // just to make sure it does not exceed your max.
    $query = preg_replace('~(?<=\blimit\s)\s*\d+\s*(,\s*\d+|\soffset\s+\d+)?\s*$~i',$maxLimit.'$1',$query);
} else $query .= " LIMIT $limit";

echo $query;

将输出SELECT * FROM aa LIMIT 20,20

于 2012-11-04T00:29:51.900 回答