【问题标题】:JavaScript MySql INSERT statement for multiple rows through URL通过 URL 多行的 JavaScript MySql INSERT 语句
【发布时间】:2019-03-14 02:30:55
【问题描述】:

美好的一天! 我正在尝试使用 API 通过 url 将对象数组发送到我的 MySql 数据库。

这是我的 API 上的代码:

app.get("/orderdetails/add", (req, res) => {
  const {
    item__,
    Qty_Ordered,
    Unit_Price,
    Ext_Price
  } = req.query;
  const INSERT_ORDERDETAILS_QUERY = `INSERT INTO oe_details (item__, 
    Qty_Ordered, Unit_Price, Ext_Price) VALUES('${item__}', '${Qty_Ordered}', 
    '${Unit_Price}', '${Ext_Price}')`;
  connection1.query(INSERT_ORDERDETAILS_QUERY, (err, results) => {
    if (err) {
      return res.send(err);
    } else {
      return res.send("successfully added order details");
    }
  });
});

以下是我的应用程序上的功能:

addOrderDetails = _ => {
  const o = this.props.o;
  const summary = o.filter(function(obj) {
    return obj.Quantity >= 1;
  });
  var url = "";
  summary.forEach(function(e) {
    url +=
      "item__=" +
      e.ExternalID +
      "&Qty_Ordered=" +
      e.Quantity +
      "&Unit_Price=" +
      e.Price +
      "&Ext_Price=" +
      e.ExtPrice +
      "&";
  });
  url = url.trim("&");
  fetch(`http://localhost:4000/orderdetails/add?${url}`).catch(err =>
    console.error(err)
  );
};

当我运行 addOrderDetails 时,我最终将以下语句发送到 MySql:

INSERT INTO oe_details (item__, Qty_Ordered, Unit_Price, Ext_Price) 
VALUES('B-2080,B-2081', '8,5', '18.75,18.75', '150,93.75')

这是错的...有没有办法让我使用相同的概念向 mysql 数据库添加多行?

如果我只有 1 行要添加,它可以正常工作...

我们将不胜感激!

谢谢,

【问题讨论】:

  • 编辑:o 是一个对象数组
  • 我只想指出这是危险的,而且安全性不好。假设您没有检查后端以防止这些攻击,这很容易使您容易受到 SQL 注入攻击和其他攻击。您应该只通过后端传递值并在后端获取值并在那里构建 SQL 语句。这样,您可以在执行语句之前检查值以进行验证。作为回报,提高您的安全性。

标签: javascript mysql api express url


【解决方案1】:

要插入多行,MySQL语句应该是这样的

INSERT INTO oe_details (item__, Qty_Ordered, Unit_Price, Ext_Price)
VALUES('B-2080,B-2081', '8,5', '18.75,18.75', '150,93.75'),
VALUES('C-2080,C-2081', '8,5', '18.75,18.75', '150,93.75'),
VALUES('B-2080,B-2081', '8,5', '18.75,18.75', '150,93.75');

您可以将您的 API 更改为 POST 调用并向其发送数据数组,然后在您的 API 中形成上述查询。

您可以使用简单的 for 循环来创建此类查询。

let summary = [1,2,3,4] // dummy data
let INSERT_ORDERDETAILS_QUERY = `INSERT INTO oe_details (item__, Qty_Ordered, Unit_Price, Ext_Price) VALUES`
summary.forEach(function(data, i) {
  INSERT_ORDERDETAILS_QUERY = `${INSERT_ORDERDETAILS_QUERY} (${data})`;
  INSERT_ORDERDETAILS_QUERY = (i !== summary.length - 1) ? `${INSERT_ORDERDETAILS_QUERY}, ` : `${INSERT_ORDERDETAILS_QUERY};`;
})

希望这会有所帮助!

【讨论】:

  • 好的,谢谢。这正是我想要做的。问题是对象的数量会根据订单上有多少物品而有所不同。您知道我如何形成上述陈述吗?为每个对象添加“Values(item, qty, price, etxprice)”
  • 是的,您可以使用简单的 for 循环来完成。参考我上面的回答。我已经用解决方案对其进行了编辑。
猜你喜欢
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 2011-12-04
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多