Передайте значение ‘null’ в базу данных MySQL в node.js

#mysql #sql #node.js

#mysql #sql #node.js

Вопрос:

Я пытаюсь передать данные из Webscraper в базу данных MySQL. У меня есть много переменных, которые нужно вводить одновременно в базу данных, и ниже приведен фрагмент кода, который я использую. (где etc. есть еще куча переменных.

 con.query(INSERT INTO Paper_2 (referenceCodeSubject,referenceCode,subject, etc.) values ('" referenceCodeSubject "','" referenceCode "','" subject "', etc.))
 

Столбцы в базе данных имеют типы INT, VARCHAR и CHAR .

Моя проблема в том, что при очистке не всем переменным будут присвоены значения, и они останутся как ‘null’, и я не могу передать это значение null как NULL в MySQL. Также было бы довольно сложно сортировать разные случаи, когда передавать что из-за большого количества переменных.

Я надеюсь, что есть простой способ сделать это, поскольку единственные решения, которые я видел до сих пор, — это опустить значение в запросе (что сложно, потому что тогда мне нужно будет решить, какие значения опустить) или передать строку «NULL» или просто значение 0. Есть ли какой-либо другой способ сделать это?

Комментарии:

1. Разве вы не используете параметризованные запросы? Я надеюсь, что вы не используете конкатенацию строк, так вы открываете себя уязвимостям SQL-инъекций.

2. показать свой код?

3. эй, не беспокойтесь о SQL-инъекции, поскольку я использую puppeteer для очистки элементов и сохранения их локально в базе данных MySQL.

4. коды действительно длинные, как 500 строк, и, вероятно, не очень эффективны (я большой новичок), поэтому я не уверен, что стоит делиться. Однако он выполняет свою работу, не хватает только этого последнего шага.

Ответ №1:

Лучше используйте встроенную функцию экранирования, чтобы избежать атак SQL-инъекций!

 conn.query(
  'INSERT INTO Paper_2 (referenceCodeSubject,referenceCode,subject) VALUES ?'
  [
    ['refCodeSubject1', 'refCode1', 'subject1'],
    ['refCodeSubject2', 'refCode2', null]
  ],
  (error, results, fields) => {
    ...
  }
)

 

Комментарии:

1. насколько я понимаю, инъекционные атаки не являются проблемой. Я использую puppeteer для сбора данных и сохранения их в локальной базе данных MySQL, к которой есть доступ только у меня (я действительно новичок в этом, поэтому могу ошибаться). Означает ли предлагаемое вами решение, что я должен хранить переменные в виде массива?

2. Не обязательно, мое решение предполагает использование встроенного экранирования для предоставления значений, хотя бы для правильного предоставления нулевого значения. Нравится conn.query('SELECT ?', [null], (error, result) => { ... });