Gianluca
Gianluca

Reputation: 990

inserting same value twice into db nodejs

I have a function in which I am trying to insert the users order into a order details table, where the admin user can see the order details of each order. the problem is, in my function, the same item is being inserted into the database twice, instead of each item. so it basically takes the last item ordered and inserts it. here's my function:

function orderDetails (req, res) {

var getOrder = "select * from " + tableName
ibmdb.open(ibmdbconn, function (err,conn) {
if (err) return console.log(err);
    conn.query(getOrder, function (err, data) {
    if (err) console.log(err);
        else console.log("data");
       
        var itemNames = "";
        var itemPrices = "";
        var itemQty = "";
        var itemEC = "";
        var itemSizes = "";

        if(data.length){ 
            for(var i = 0;i < data.length;i++) {

                itemNames = data[i].ITEMDESC 
                console.log("item names: " + itemNames)

                itemPrices = data[i].PRICE
                console.log("item prices: " + itemPrices)

                itemQty = data[i].QTY
                console.log("item qty: " + itemQty)

                itemEC = data[i].EACH_CASE
                console.log("item ec: " + itemEC)

                itemSizes = data[i].SIZE
                console.log("item sizes: " + itemSizes)
                console.log("------")

                var insertOrderDetails = "insert into ORDERDETAILS (ORDERNUM, ITEMNAME, ITEMPRICE, QTY, EACH_CASE, SIZE) VALUES ('" + orderNumber + "', '" + itemNames + "', '" + itemPrices + "', '" + itemQty + "', '" + itemEC + "', '" + itemSizes + "')"
                    
                        ibmdb.open(ibmdbconn, function (err,conn) {
                        if (err) return console.log(err);
                         conn.query(insertOrderDetails, function (err, data) {
                            if (err) console.log(err);
                                else console.log("data");

                                console.log(data)
                                conn.close(function () { 
                                })
            
                            })
                        })
                    }
             }
        conn.close(function () { 
           })
         })
       })
      }

the output I get when I log is correct, and it looks like this:

item names: 50 inch Water Hose
item prices: 39.99
item qty: 42
item ec: Each
item sizes: undefined
------
item names: Blue Rubber on Grey Polly Cotten Gloves
item prices: 9.99
item qty: 4
item ec: Pair
item sizes:  L
------

but when I go and check my table, the outcome is different.

 item names: Blue Rubber on Grey Polly Cotten Gloves
    item prices: 9.99
    item qty: 4
    item ec: Pair
    item sizes:  L
    ------
    item names: Blue Rubber on Grey Polly Cotten Gloves
    item prices: 9.99
    item qty: 4
    item ec: Pair
    item sizes:  L
    ------

Upvotes: 1

Views: 205

Answers (1)

Prime
Prime

Reputation: 2849

You don't need to open connection again in loop.

function orderDetails(req, res) {
  var getOrder = "select * from " + tableName;
  ibmdb.open(ibmdbconn, function (err, conn) {
    if (err) return console.log(err);
    conn.query(getOrder, function (err, data) {
      if (err) console.log(err);
      else console.log("data");

      var itemNames = "";
      var itemPrices = "";
      var itemQty = "";
      var itemEC = "";
      var itemSizes = "";

      if (data.length) {
        for (var i = 0; i < data.length; i++) {
          itemNames = data[i].ITEMDESC;
          console.log("item names: " + itemNames);

          itemPrices = data[i].PRICE;
          console.log("item prices: " + itemPrices);

          itemQty = data[i].QTY;
          console.log("item qty: " + itemQty);

          itemEC = data[i].EACH_CASE;
          console.log("item ec: " + itemEC);

          itemSizes = data[i].SIZE;
          console.log("item sizes: " + itemSizes);
          console.log("------");

          let insertOrderDetails = "insert into ORDERDETAILS (ORDERNUM, ITEMNAME, ITEMPRICE, QTY, EACH_CASE, SIZE) VALUES ('" +
            orderNumber + "', '" + itemNames + "', '" + itemPrices + "', '" + itemQty + "', '" + itemEC + "', '" + itemSizes + "')";

          conn.query(insertOrderDetails, function (err, data) {
            if (err) console.log(err);
            else console.log("data");
          });
        }
      }
      conn.close(function () {});
    });
  });
}

Upvotes: 1

Related Questions