当然是一个简单的问题,但我无法解决。。。
我只想检测我的sql查询是否以"select"或其他任何字符开头。这个代码似乎不起作用:
if (preg_match("/^(select)/i", $sql) > 0)
{
// SELECT query
}
else
{
// other query
}
谢谢你的帮助!
[编辑]好的,我有根本原因:我可能在关键字"select"之前有空格、制表符和换行符。。。
不需要正则表达式,请使用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.
Ex:http://ideone.com/hLaBq
或者,如果你想坚持preg_match:
if (preg_match("/^select (.*)/i", trim($query)) > 0) {
//...
Ex:http://ideone.com/fzh2I
尝试:
if (preg_match("/^[[:space:]]*select/i", $sql))
这将匹配起始和select
之间的任何(或没有)空白,因此会考虑您的空格、制表符等。
更新,你的系统上可能是这样的:
if (preg_match("/^s*select/i", $sql))
好的,我得到了:
preg_match("/[s]*(select)/i", $sql)
无论如何,谢谢你的回答!