【发布时间】:2021-05-03 03:56:36
【问题描述】:
我在 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'
}
我不确定如何解决这个问题。 谢谢你的帮助:)
【问题讨论】:
-
我认为没有左括号 (
() 或删除最后一个括号。您的查询看起来像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 是要更改的字段的开始字母) -
嗯,是的,你有一个右括号——理论上——不需要在那里。您还有一个可能容易受到 SQL 注入的 SQL 语句。我建议查看可用的方法来执行参数化查询,以降低您的 SQL 注入风险。这是一个基本的入门 - veracode.com/blog/secure-development/…
-
使用参数化查询更安全,也更容易!如果您从代码中删除所有那些混乱的字符串连接,您可能会更容易发现语法错误。例如:
UPDATE TABLE SET C=?, R=?, Y=?, S=?, E=?, M=?, WHERE USERNAME=?)这可以让您立即看到不匹配的括号!
标签: javascript mysql sql node.js db2