如何在NodeJS中使用HTTP请求向MySQL查询添加varchar值

rjjhvcjd  于 2022-12-18  发布在  Node.js
关注(0)|答案(1)|浏览(116)

你好,我正在使用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”
我应该修改代码的哪一部分?谢谢:)

92dk7w1h

92dk7w1h1#

首先,不要***将用户输入直接***放在SQL请求中,这是一个非常高的安全风险,任何恶意用户都有机会执行SQL注入。
根据连接数据库所使用的包,应该有一个“prepare”方法,用于创建语句,在语句中将占位符(如问号)放在值要去的位置。
然后在execute方法中,你将传递一个包含实际值的数组或对象,包将确保你的输入格式正确,并且不允许注入发生。
如果您使用的是mysql程序包,则可以使用一些方法来转义查询值(请参阅转义查询值)。您还可以使用问号并使用db.query的第二个参数来传入值。
例如,您的查询将类似于:

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
    ]
);

相关问题