автоматическое добавление mysql_real_escape_string с помощью regexp

#mysql #regex #preg-replace #mysql-real-escape-string

#mysql #регулярное выражение #preg-заменить #mysql-реальная escape-строка

Вопрос:

У меня есть класс mysql, у которого есть вызываемый метод, query() который в основном mysql_query() . Этот метод получает запрос в качестве параметра следующим образом:

insert into table set field1 = 'value 1', field2 = 'value 2' или select id from table where field1 = 'value 1', field2 like '%value 2%'

Конечно, это не очень хорошая практика, потому что все значения должны быть сначала переданы через mysql_real_escape_string() .

Я хочу использовать регулярное выражение для отслеживания всех шаблонов, в которых некоторая информация передается методу, например, выделенные жирным шрифтом разделы:

insert into table set field1 = '**value 1**', field2 = '**value 2**' .

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

insert into table set field1 = '**value 1', field2 = 'value 2**'

и если он не жадный, он поймает:

insert into table set field1 = '**value **' 1', field2 = 'value 2' (где filed1 на самом деле = «значение ‘1».

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

insert into table set field1 = {{value 1}}, field2 = {{value 2}} а затем просто перехватите весь текст между «{{» и «}}» и замените его на его mysql_real_escape_string() ‘отредактированное значение.

Есть ли способ сделать это более профессиональным способом?

ps: извините за наличие ** внутри кода, я не знаю, как выделить галочки жирным шрифтом

Ответ №1:

Используйте PDO: http://php.net/manual/en/book.pdo.php

Ответ №2:

Это плохая идея, потому что если бы вы использовали }}, то теперь вам пришлось бы экранировать для закрытия }}. По сути, вы изобретаете новый синтаксис, чтобы делать то же самое.

вместо этого используйте подготовленные инструкции.