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

Другие вопросы по тегам