инструкция обновления sql node.js

#javascript #mysql #sql #node.js #db2

Вопрос:

У меня возникла проблема с моим оператором обновления в sql, я не уверен, возможно ли это, но я пытаюсь это сделать:

 var updateStudent = "update table set CHILDNAME2 = '"   req.body.childName   "', REPORT2 = '"   report   "', YEAR2 = '"   req.body.year   "', STARTDAY2 = '"   req.body.startDay   "', STARTTIME2 = '"   req.body.startTime   "', ENDTIME2 = '"   req.body.endTime   "', ENDDAY2 = '"   req.body.endDay   "', MONTH2 = '"   req.body.month   "' WHERE USERNAME = '"   req.body.username   "')"
 

это дает мне ошибку:

  [Error: [IBM][CLI Driver][DB2/LINUXX8664] SQL0104N  An unexpected token ")" was found following "ERNAME = 'undefined'".  Expected tokens may include:  "END-OF-STATEMENT".  SQLSTATE=42601
] {
  error: '[node-ibm_db] SQL_ERROR',
  sqlcode: -104,
  state: '42601'
}
 

Я не знаю, как это исправить.
спасибо за вашу помощь 🙂

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

1. Я думаю, что нет открытой скобки ( ( ) или удалить последнюю скобку. Ваш запрос выглядит так UPDATE TABLE SET C='c', R='r', Y='y', S='s', E='e', M='m', WHERE USERNAME='req.body.username'); (C, R, Y, S, E, M-начальный алфавит, поле которого нужно изменить)

2. Ну да, у вас есть закрывающая скобка, которой — теоретически — там быть не должно. У вас также есть инструкция SQL, которая потенциально подвержена SQL-инъекциям. Я бы предложил изучить доступные методы выполнения параметризованных запросов, которые снизят риск внедрения SQL. Вот базовый стартер — veracode.com/blog/secure-development/…

3. Использование параметризованных запросов безопаснее, а также проще! Если вы удалите всю эту беспорядочную конкатенацию строк из своего кода, вам, вероятно, будет легче обнаружить синтаксические ошибки. Например: UPDATE TABLE SET C=?, R=?, Y=?, S=?, E=?, M=?, WHERE USERNAME=?) Это позволяет вам сразу увидеть несоответствующую скобку!

Ответ №1:

Я могу предложить вам использовать параметризованные запросы, чтобы сделать ваш запрос менее запутанным. Кроме того, на самом деле его безопаснее использовать.

 var updateStudent = `UPDATE table
SET CHILDNAME2 = ?,
REPORT2 = ? YEAR2 = ?,
STARTDAY2 = ?,
REPORT2 = ?,
YEAR2 = ?,
STARTTIME2 = ?,
ENDTIME2 = ?,
MONTH2 = ?
WHERE USERNAME = ?`;

let variables = [
    req.body.childName,
    report,
    req.body.year
    ...
];

con.query(updateStudent, variables, (err, fields, response) => {
    ...
});

let variables = [
    req.body.childName,
    report,
    req.body.year
    ...
];

con.query(updateStudent, variables), (err, fields, response) => {
    ...
});