2014-09-16 4 views
0

У меня есть этот запрос, используя PDO:Извлечение параметров из п.д.о. запроса

SELECT * FROM users WHERE name LIKE :name AND age > :age1 AND age < :age2 

как я могу извлечь параметры этого запроса с помощью регулярного выражения для того, чтобы получить массив, похожий на:

$arr[0] => name, 
$arr[1] => age1, 
$arr[2] => age2 

ответ

0

Попробуйте это для размера ..

(:[^\s]*)\s? 

Вот демо к этому Regex в действии с использованием regexr.com

http://regexr.com/39gnv

А вот демо в PHP

test.php

$query="Select * from users where name like :name and age > :age1 and age < :age2"; 
preg_match_all('/(:[^\s]*)\s?/',$query,$matches); 
print_r($matches); 

Выход php test.php

Array 

    (
     [0] => Array 
      (
       [0] => :name 
       [1] => :age1 
       [2] => :age2 
      ) 

     [1] => Array 
      (
       [0] => :name 
       [1] => :age1 
       [2] => :age2 
      ) 

    ) 
+0

Спасибо! Почему возвращается в 2 раза больше результатов? – Konstantinos

+1

Я считаю, что первым массивом является соответствующий объект (поле с необязательным конечным пространством), а второе - сопоставимые группы захвата (поле без необязательного конечного пространства). – Seidr

+0

для более точных результатов preg_match_all ('/ (: [^ \ s \ b \, \) \'] *) (? = [\ S \ b \, \) \ '])? /', $ Query, $ Матчи); – Konstantinos

Смежные вопросы