nodejs: как избежать целой строки sql вместо экранирования каждого аргумента?
Я использую https://github.com/mysqljs/mysql.git библиотеку.
У меня есть архитектура запросов mysql db, в которой я не могу изменить файл запроса SQL один за другим, чтобы экранировать каждый аргумент, поскольку файлов слишком много, но все запросы SQL будут вызывать метод запроса одного и того же базового экземпляра mysql, поэтому я Интересно, смогу ли я избежать возможной строки SQL в базовом методе запроса mysql.
Я хочу избежать всей строки SQL, как
select * from tableA where name = 'foo'bar
в
select * from tableA where name = 'foo\'bar'
с какой-то функцией, как mysql_escape("select * from tableA where name = 'foo'bar'")
вместо того, чтобы делать это с помощью подготовки запросов или объединения экранированных строк.
1 ответ
Нет способа сделать это, что не привело бы к действительно неэффективной функции или некоторому плохому взлому. Просто используйте параметризованные запросы, это в основном то, для чего они существуют. Если вы не можете использовать их, вы используете строки concat.
Запуск mysql_escape для всего запроса потребует, чтобы функция знала, какие символы являются частью вашего запроса, а какие символы являются частью входных значений. Вы могли бы написать какое-то глупое регулярное выражение, чтобы попытаться извлечь значения из запроса и затем избежать их, но это просто плохая идея.