#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:
Это плохая идея, потому что если бы вы использовали }}, то теперь вам пришлось бы экранировать для закрытия }}. По сути, вы изобретаете новый синтаксис, чтобы делать то же самое.
вместо этого используйте подготовленные инструкции.