你好,我正在使用Express.js和Node.js构建一个测试后端。它有一个MySQL数据库连接。我想使用Postman将一个数据集POST到用户列中。所有的函数都已配置,但是,我在使用javascript构建MySQL查询运行时遇到了问题。
我从 Postman 那里得到的HTTP post请求见上图。
async function create(user){
const result = await db.query(
`INSERT INTO user
(username, password, fullname, type, gender, dob, address, email, contact_no)
VALUES(
${user.username},
${user.password},
${user.fullname},
${user.type},
${user.gender},
${user.dob},
${user.address},
${user.email},
${user.contact_no}
)`
);
let message = 'Error in creating the user!';
if (result.affectedRows) {
message = 'user created successfully!';
}
return {message};
}
上面显示了我用来向数据库添加用户的javascript函数,但情况是查询应该
INSERT INTO user
(username, password, fullname, type, gender, dob, address, email, contact_no)
VALUES(
"Madhawa",
"asdfg",
"Madhawa_Cooray",
"CUSTOMER",
"MALE",
"2000-11-10",
"Colombo",
"madawasahasgmail.com",
"0778923476"
);
我在Node.js运行时得到了以下MySQL查询
INSERT INTO user
(username, password, fullname, type, gender, dob, address, email, contact_no)
VALUES(
Madhawa,
asdfg,
Madhawa_Cooray,
CUSTOMER,
USER,
2000-11-10,
Colombo, Dehiwala,
madawasahasgmail.com,
0778923476
)
型
所以我在MySQL上得到了以下错误,
错误1054(42S22):“字段列表”中的未知列“Madhawa”
我应该修改代码的哪一部分?谢谢:)
1条答案
按热度按时间92dk7w1h1#
首先,不要***将用户输入直接***放在SQL请求中,这是一个非常高的安全风险,任何恶意用户都有机会执行SQL注入。
根据连接数据库所使用的包,应该有一个“prepare”方法,用于创建语句,在语句中将占位符(如问号)放在值要去的位置。
然后在
execute
方法中,你将传递一个包含实际值的数组或对象,包将确保你的输入格式正确,并且不允许注入发生。如果您使用的是
mysql
程序包,则可以使用一些方法来转义查询值(请参阅转义查询值)。您还可以使用问号并使用db.query
的第二个参数来传入值。例如,您的查询将类似于: