我的preg_match语法有效吗?

Mar*_*ean 2 php regex preg-match

我正在向if我的数据库抽象层添加一个语句,以挑选出对少数数据库表的任何尝试查询.

基本上,如果我的应用程序试图从被称为members或者members_profiles我想调用我的if语句的数据库表中创建,读取或销毁数据.

if (
    preg_match('/INSERT INTO [members|members_profiles]/', $sql) ||
    preg_match('/UPDATE [members|members_profiles]/', $sql) ||
    preg_match('/DELETE FROM [members|members_profiles]/', $sql))
{
    // do if statement stuff here...
}
Run Code Online (Sandbox Code Playgroud)

我不是正则表达式/ preg-match master,但if如果SQL查询匹配,则上述语句将返回true:

  • INSERT INTO members ... 要么 INSERT INTO members_profiles ...
  • UPDATE members ... 要么 UPDATE members_profiles ...
  • DELETE FROM members ... 要么 DELETE FROM members_profiles ...

或者我的preg-match语法是否关闭?

ken*_*ytm 6

语法有效但不会执行您想要的操作.

对于图案的交替,请使用

preg_match('/INSERT INTO (?:members|members_profiles)/', $sql) ||
//                       ^^^                        ^
Run Code Online (Sandbox Code Playgroud)

在PCRE中,[…]定义一个字符类.这将匹配1个字符,因为它出现在括号内.在你的情况[members|members_profiles]将匹配1个字符,如果它是一个b,e,f,i,l,m,o,p,r,s,|_.

分组是使用另一种括号完成的(?:…).


(顺便说一句,请不要使用Regex来检测数据库更改尝试.请改为限制数据库用户的权限.)