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`" разобью эксплойдом по '.'
как мне быстрее и проще всего это сделать?
или свои варианты, может функция подобного экранирования уже написана?
помогите справится с задачей
есть запрос произвольного вида без экранирования имен
например "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`" разобью эксплойдом по '.'
как мне быстрее и проще всего это сделать?
или свои варианты, может функция подобного экранирования уже написана?