sql更新语句node.js

Posted

技术标签:

【中文标题】sql更新语句node.js【英文标题】:sql update statement node.js 【发布时间】: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=?) 这可以让您立即看到不匹配的括号! 【参考方案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) => 
    ...
);

【讨论】:

以上是关于sql更新语句node.js的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 概述

Node.js的安装和一些简单的使用

Node.js 入门

Node.js

Node.js

一初始Node.js