Php正则表达式查找字符串是否为mysql select语句

Php正则表达式查找字符串是否为mysql select语句,php,regex,preg-match,preg-match-all,Php,Regex,Preg Match,Preg Match All,我试图在执行查询之前验证查询,若查询不是mysql select语句,那个么我必须向用户显示消息 我从该链接中找到以下正则表达式: 接下来我写了下面的代码,但它总是打印not select查询($match每次都是空的) 请更正正则表达式以验证sql select语句(select语句中可以有select、from、where、join、orderby groupby all)。 或者让我知道完成任务的其他好方法 /* some sample select statements select

我试图在执行查询之前验证查询,若查询不是mysql select语句,那个么我必须向用户显示消息

我从该链接中找到以下正则表达式:

接下来我写了下面的代码,但它总是打印not select查询($match每次都是空的)

请更正正则表达式以验证sql select语句(select语句中可以有select、from、where、join、orderby groupby all)。 或者让我知道完成任务的其他好方法

/*
some sample select statements
select * from users where id=1;

select * from users where id=1 AND name= 'Prabhu';

select * from users where id=1 AND name= 'Prabhu' order by name;

Select * from users where id=1 AND name= 'Prabhu' group by id order by name;

Select * from users join role on users.role_id=role.id where id=1 AND name= 'Prabhu' group by id order by name;
*/

为什么不做一些像:

$reg = "/^(\s*?)select\s*?.*?\s*?from([\s]|[^;]|(['"].*;.*['"]))*?;\s*?$/i";
适用于SQL select查询示例:

它还检查正在运行的唯一SQL查询是select查询,因此它应该只验证它们。它通过确保只有一个来做到这一点;除非如此;在字符串中,因此下面的内容将进行验证

select * from users where id=1 AND name= 'Pra;bhu';
但这不会

select * from users where id=1 AND name= 'Prabhu'; drop table;
以及不检查的正则表达式;在字符串中,如果它在其中,则将失败:

$reg = "/^(\s*?)select\s*?.*?\s*?from([\s]|[^;])*?;\s*?$/i"

为select查询发布一个示例。@AvinashRaj有很多置换和组合。如果您发布所有可能的select语句,那就更好了@Ravi这个怎么样?天哪Ravi。。。我可以这样做,但regex101.com不允许使用很长的模式。非常好,它对管理员界面很有用,可以防止删除或更新。我将它用于管理仪表板,用于统计,允许管理员除了多个端点之外,还可以直接使用sql查询数据库。但是对PHP有一点修正,如果已经对字符串使用了双引号,则需要转义双引号:
$reg=“/^(\s*?)选择\s*?*?*?。\s*?from([\s].[^;].[124;](['\“].*['\'”])*?;\ s*?$/i”。无法编辑,因为编辑少于6个字符。谢谢。这非常有帮助,但它不包括不包含“FROM”的select语句,例如:
select 22作为种类,1作为代码,test作为标题
select * from users where id=1 AND name= 'Prabhu'; drop table;
$reg = "/^(\s*?)select\s*?.*?\s*?from([\s]|[^;])*?;\s*?$/i"