Invizz
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Ладно, перефразирую: Есть система. Возникла необходимость изменить ее до определеннного порядка. Для этого, нужно сделать несколько preg_replace'ов для запросов. ДРУГИХ ВАРИАНТОВ РЕШЕНИЯ НЕ ДАНО. И не обсуждается по многим причинам, могу даже сказать по каким. Эти реплейсы выглядят примерно так: $query=preg_replace( '@SELECT\s{1,}(DISTINCT){0,1}\s{1,}(.*?)FROM\s{1,}(\S+)(.*?)JOIN(.*?)WHERE(.*?)\s(LIMIT|ORDER|GROUP)@s', 'SELECT \1 \2 FROM \3 \4 JOIN \5 WHERE \3.blog_id='.$this->blog_id.' AND ( \6 ) \7', $query); Как видите, он ищет по слова WHERE JOIN FROM итд. Если в названии колонки или таблицы (к примеру), встретится слово where, например запрос будет иметь вид select * from table left join table_where where то он "схавает" where тот который неслужебный. а так не надо. Тут можно сказать, так сделай типа, поиск с пробелами и чувствительным к регистру! А нет, а допустим если запрос: INSERT INTO posts(id,content) VALUES('','А я тут сегодня начился пользоваться \) скобками, \' кавычками VALUE WHERE INTO '); и в переменном тексте могут содержаться ненужные слова. Поэтому было принято решение сначала все в озможные переменные данные "экстрактнуть" из запроса, сделать изменения и данные воткнуть обратно. Лучше объяснил? |