2012-02-03 248 views
2

显然一个简单的问题开始,但我不能得到解决......PHP的preg_match用关键字

我只是想,如果我的SQL查询开始“选择”或其他任何察觉。 此代码似乎不起作用:

if (preg_match("/^(select)/i", $sql) > 0) 
{ 
// SELECT query 
} 
else 
{ 
// other query 
} 

感谢您的帮助!

[编辑] 好的,我有根本原因: 我可以具有空格,制表符和线返回关键字之前“中选择” ...

回答

2

OK,我知道了:

preg_match("/[\s]*(select)/i", $sql) 

谢谢您的回答呢!

5

正则表达式是没有必要的,使用stripos

$query = "SELECT * FROM table WHERE field = 1"; 

if (stripos(trim($query), "SELECT") === 0) 
    echo "Query begins with $str"; 
else 
    echo "Query DOES NOT begin with $str"; 

// Notice: trim() will remove whitespace before and after your $query string. 

防爆http://ideone.com/hLaBq

另外,如果你想坚持preg_match

if (preg_match("/^select (.*)/i", trim($query)) > 0) { 
    //... 

防爆http://ideone.com/fzh2I

+0

我想这会工作,但我想坚持preg_match(),thx无论如何 – 2012-02-03 22:48:53

1

尝试:

if (preg_match("/^[[:space:]]*select/i", $sql)) 

这将匹配的开始和select之间的任何(或没有)的白色空间,所以你的空格,制表符等被占。

更新,它可能是这个系统上:

if (preg_match("/^\s*select/i", $sql)) 
+0

不工作,thx无论如何 – 2012-02-03 22:46:35

+0

尝试我添加的修订。 – 2012-02-03 22:51:01