Php 强制限制用户MySQL查询
因此,我有一个区域,人们可以对我的数据库编写自己的查询,但我希望限制返回的结果(很像PhpMyAdmin) 因此,我需要检查Php 强制限制用户MySQL查询,php,mysql,pdo,limit,Php,Mysql,Pdo,Limit,因此,我有一个区域,人们可以对我的数据库编写自己的查询,但我希望限制返回的结果(很像PhpMyAdmin) 因此,我需要检查$\u POST['query']以查看是否有限制语句,如果有,请确保它在30以下,比如说。如果没有限制,我需要添加它 我该怎么做?忽略风险。。。我认为最好是将查询用作子查询并应用限制。因此避免对查询求值 SELECT * FROM ( SELECT * FROM 'table' LIMIT 0 , 100 ) AS query LIMIT 0 , 30 忽视
$\u POST['query']
以查看是否有限制语句,如果有,请确保它在30以下,比如说。如果没有限制,我需要添加它
我该怎么做?忽略风险。。。我认为最好是将查询用作子查询并应用限制。因此避免对查询求值
SELECT *
FROM (
SELECT *
FROM 'table'
LIMIT 0 , 100
) AS query
LIMIT 0 , 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;
$query='SELECT*FROM aa LIMIT 100,20';
$limit=20;//预定义的最大限制
//可能性:
//极限N,N]
//限制N偏移量N
preg_match(“~(?您可以使用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;
$query='SELECT*FROM aa LIMIT 100,20';
$limit=20;//预定义的最大限制
//可能性:
//极限N,N]
//限制N偏移量N
preg_match(“~”)除非通过正则表达式模式进行检查(和修改),否则您会意识到这是非常危险的,对吗?除了解析查询并将限制放入其中之外,没有其他方法。但即使这样也不能保证,因为在某些情况下限制没有意义。例如,如果它们没有select count(*)从表
中,除非通过正则表达式模式进行检查(和修改),否则您会意识到这是非常危险的,对吗?除了解析查询并将限制放入其中之外,没有其他方法。但即使这样也不能保证,因为在某些情况下限制是没有意义的。例如,如果它们执行了选择count(*)从表中看
ooh,我在想正则表达式,但这是一个更优雅的解决方案。但是,是的,我认为每个读过这个问题的人都认为它疯狂。ooh,我在想正则表达式,但这是一个更优雅的解决方案。但是,是的,我认为每个读过这个问题的人都认为它疯狂。