JavaScript запрос SELECT в базу данных MySQL

При разработке приложения на стеке JS + NODE.js + Express + MySQL2 столкнулся с тем, что запрос, сформированного с помощью pool.query(), зависит от синтаксиса, а именно - от правильности указания в запросе кавычек ( или ' или " ).

Кавычка это служебный символ языка SQL. Она отвечает за отметку начала и конца строки. Если кавычку нужно записать как часть строки ее нужно экранировать \".

Итак:

  • обратные кавычки` используются тогда, когда необходимо экранировать название столбца (если оно совпадает с зарезервированным ключевым словом);
  • 'одинарные кавычки' следует использовать для даты и строки;
  • "двойные кавычки" следует использовать для написания непосредственно запроса.

Путем проб и ошибок пришел к выводу, что правильные кавычки необходимо указывать непосредственно в строке запроса (в том числе, с использованием экранирования обратным слэшем - \), так как их передача в функцию в строке аргумента приводила к некорректной работе запроса (запрос отрабатывал, но возвращал неправильные или неполные значения - хотя, может это и моя невнимательность...).

Пример формирования рабочего JS запроса к mySQL:

для простоты опустил некоторые вещи в коде (например, обработку ошибок)

Файл конфигурации соединения с базой данных mySQL (файл bd.config.js):

Установка пула соединений с mySQL (файл bd.connection.js):

Роутер, получающий результат запроса к mySQL:

обратите внимание на внутренние кавычки во втором аргументе функции getSearchData()

Функция запроса SELECT с LIKE к mySQL:

обратите внимание на экранирование внешних кавычек в аргументе query() и кавычки вокруг %${searchWord}%

Для защиты от SQL-инъекций в тексте запроса используйте плейсхолдеры ? и ??.

Например:

?? - используется для имен таблиц и столбцов (он отделяется от них обратными кавычками);

? - для других значений.

 

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.