显然一个简单的问题开始,但我不能得到解决......PHP的preg_match用关键字
我只是想,如果我的SQL查询开始“选择”或其他任何察觉。 此代码似乎不起作用:
if (preg_match("/^(select)/i", $sql) > 0)
{
// SELECT query
}
else
{
// other query
}
感谢您的帮助!
[编辑] 好的,我有根本原因: 我可以具有空格,制表符和线返回关键字之前“中选择” ...
显然一个简单的问题开始,但我不能得到解决......PHP的preg_match用关键字
我只是想,如果我的SQL查询开始“选择”或其他任何察觉。 此代码似乎不起作用:
if (preg_match("/^(select)/i", $sql) > 0)
{
// SELECT query
}
else
{
// other query
}
感谢您的帮助!
[编辑] 好的,我有根本原因: 我可以具有空格,制表符和线返回关键字之前“中选择” ...
OK,我知道了:
preg_match("/[\s]*(select)/i", $sql)
谢谢您的回答呢!
正则表达式是没有必要的,使用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.
另外,如果你想坚持preg_match:
if (preg_match("/^select (.*)/i", trim($query)) > 0) {
//...
尝试:
if (preg_match("/^[[:space:]]*select/i", $sql))
这将匹配的开始和select
之间的任何(或没有)的白色空间,所以你的空格,制表符等被占。
更新,它可能是这个系统上:
if (preg_match("/^\s*select/i", $sql))
不工作,thx无论如何 – 2012-02-03 22:46:35
尝试我添加的修订。 – 2012-02-03 22:51:01
我想这会工作,但我想坚持preg_match(),thx无论如何 – 2012-02-03 22:48:53