автоматическое экранирование имен полей в SQL запросе

Статус
В этой теме нельзя размещать новые ответы.

gekakos

Новичок
автоматическое экранирование имен полей в SQL запросе

помогите справится с задачей
есть запрос произвольного вида без экранирования имен
например "SELECT id FROM users WHERE rating>100 AND stat<>'admin'"
его нужно преобразовать к виду "SELECT `id` FROM `users` WHERE `rating`>100 AND `stat`<>'admin'"
т.е. экранировать имена полей (чтобы поле с именем from не вызывало ошибку)

при чем часть задачи сделана.
осталось проэкранировать имена в части после WHERE или выражение для JOIN
т.е. нужно так
"rating>100 AND stat<>'admin'" -> "`rating`>100 AND `stat`<>'admin'"

мой вариант таков:
сначала я определю сепараторы:
$separators = array('=','<>','>','<','>=','<=','!>','!<','IN','BETWEEN','LIKE','IS');

теперь нужно искать все слова левее каждого из сепараторов. это будет заведомо имя поля (я прав?)
// если в имени есть имя таблицы, то "users.id" -> "`users`.`id`" разобью эксплойдом по '.'

как мне быстрее и проще всего это сделать?
или свои варианты, может функция подобного экранирования уже написана?
 
Мой вариант - это хотя бы создать массив в котором будут лежать все имена столбцов принадлежащей данной таблице и не е***ь мозги...

P.S. Вообще не понимаю, что побуждает людей использовать ЭТО - `stat`<>'admin'... что это за знак такой вообще - "<>" ???

-~{}~ 11.12.08 16:56:

А вообще просто не стоит называть столбцы и таблицы зарезервированными в MySQL словами.
 

Фанат

oncle terrible
Команда форума
есть запрос произвольного вида без экранирования имен
переписать в запрос произвольньго вида с экранированием имен.

-~{}~ 11.12.08 17:00:

древняя мудрость так гласит
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху