#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) => {
...
});