2012-10-02 28 views
0

失败,我有一个正则表达式expresion是这样正则表达式的新行

preg_match("/^\\s*(insert|delete|update|replace|create|drop|alter|use) /i",$query) 

这是一个很老的功能,这是负责的allmost所有我们保持我们网站上的交易的一部分(其就像8岁的分...)

想象一下,我suprice当此查询对这个表达式失败TE测试....

"DELETE 
        FROM KursSmer 
        WHERE IDKurs = '523' AND 
          IDSmer = '50' AND 
          IDSkolskaGodina = '1' AND 
          JeObavezan = '0'" 

我花了大约1小时,以获得讨厌的家伙..但我做到了......有在DELETE字旁边的第一行末尾有一个\ n行元素... like DELETE\n

现在,我想知道这是否可以纠正?

+0

你已经使用'\ S *'早些时候在正则表达式。你知道这意味着什么吗? – mario

+0

我希望你没有使用这个正则表达式来防止/检测sql注入... –

回答

5

对于多行,您需要m修饰符。

preg_match("/^\\s*(insert|delete|update|replace|create|drop|alter|use) /im",$query) 

Pattern Modifiers

+0

谢谢:),你不会相信这个正则表达式在核心数据库类超过8年,并没有破坏它,直到现在...直到我对它进行了修补:P – Sangoku