php preg_match начинается с ключевого слова - PullRequest
4 голосов
/ 04 февраля 2012

Конечно, простая проблема, но я не могу ее решить ...

Я просто хочу определить, начинается ли мой SQL-запрос с «выбора» или чего-то еще. Этот код не работает:

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

Спасибо за вашу помощь!

[EDIT] Хорошо, у меня есть причина: У меня могут быть пробелы, символы табуляции и возврата строк перед ключевым словом "select" ...

Ответы [ 3 ]

7 голосов
/ 04 февраля 2012

Регулярное выражение не обязательно, используйте 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

2 голосов
/ 04 февраля 2012

ОК, я понял:

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

Спасибо за ваши ответы в любом случае!

2 голосов
/ 04 февраля 2012

Попробуйте:

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

Это будет совпадать с любым (или без) пробелом между началом и select, поэтому ваши пробелы, вкладки и т. Д. Учитываются.

Обновление, это может быть в вашей системе:

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