所以我有一个区域,人们可以针对我的数据库编写自己的查询,但我想限制返回的结果(很像 PhpMyAdmin)。
所以我需要检查$_POST['query']
是否有限制声明,如果有,请确保它低于 30,比如说。如果没有限制,我需要添加它。
我该怎么做?
忽略风险......我认为最好的是将查询用作子查询并应用限制。所以你避免评估查询。
SELECT *
FROM (
SELECT *
FROM 'table'
LIMIT 0 , 100
) AS query
LIMIT 0 , 30
您可以使用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