Mysql-запрос больше не работает при экранировании значений - PullRequest
0 голосов
/ 13 июня 2019

У меня есть запрос на добавление столбцов в базу данных на моем Node-сервере:

const query = 'ALTER TABLE ' + mysql.escape(tableData[i]) + ' ADD ' + mysql.escape(attributeData[0]) + ' FLOAT DEFAULT NULL;'

Если я использую запрос без mysql.escape(), он добавляет столбцы, как и положено. Однако при использовании функции escape для предотвращения инъекций sql она больше не работает. Почему это так?

Вот пример запроса с escape-функцией, он не возвращает ошибок, но также не добавляет столбец в таблицу:

ALTER TABLE '1$0_Test_2018' ADD 'Eigenschaft_3' FLOAT DEFAULT NULL;

Этот запрос работает отлично, однако я хочу убедиться, что экранированы пользовательские данные:

ALTER TABLE 1$0_Test_2018 ADD Eigenschaft_3 FLOAT DEFAULT NULL;

1 Ответ

1 голос
/ 13 июня 2019

Похоже, ваша проблема в том, что метод escape возвращает значение, заключенное в кавычки, а не обратные пометки.

В github docs похоже, что вам просто нужно изменить escape на escapeId.

Если вы не можете доверять идентификатору SQL (имя базы данных / таблицы / столбца) потому что он предоставляется пользователем, вы должны избежать его с mysql.escapeId (идентификатор)

...