我正在向数据库抽象层添加一个 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...
}
我不是正则表达式/preg-match高手,但是如果SQL查询匹配,上面的if
语句会返回true吗:
插入成员...
或插入成员_个人资料...
更新成员...
或更新member_profiles ...
从成员中删除...
或从members_profiles中删除...
或者我的 preg-match 语法是否有问题?
最佳答案
语法有效,但不会执行您想要的操作。
要交替模式,请使用
preg_match('/INSERT INTO (?:members|members_profiles)/', $sql) ||
// ^^^ ^
<小时/>
在PCRE中,[…]
定义了一个字符类。这将匹配 1 个字符,因为它出现在括号内。在您的情况下,如果 [members|members_profiles]
是 b
、e
、f
之一,则它会匹配 1 个字符, i
, l
, m
, o
, p
, r
、s
、|
或 _
。
分组是使用另一种括号(?:…)
来完成的。
(顺便说一句,请不要使用正则表达式来检测数据库更改尝试。而是限制数据库用户的权限。)
关于php - 我的 preg_match 语法有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3246239/