1

I have a very simple question that I haven't been able to solve for days. I wrote the following simple code block to give an example.

var mysql = require("mysql")

var connection = mysql.createConnection({
  host: "localhost",
  user: "***",
  password: "***",
  database: "***",
  charset: "utf8mb4"
})

var testArr = ["banana", "apple", "orange", "strawberry"]

for (let fruit of testArr) {
    console.log("fruit check:" + fruit)

    var fruitName = connection.escape(fruit)

    var sql = "INSERT INTO test (name) VALUES (" + fruitName + ")";

    connection.query(sql, function (err, result) {
        if (err) throw err;
        console.log("1 record inserted");
    });
}

The only thing I want to do here is to actually proceed sequentially after entering the for loop. At the moment, the console side comes as follows;

fruit check:banana
fruit check:apple
fruit check:orange
fruit check:strawberry
1 record inserted
1 record inserted
1 record inserted
1 record inserted

I want it to come like this:

fruit check:banana
1 record inserted
fruit check:apple
1 record inserted
fruit check:orange
1 record inserted
fruit check:strawberry
1 record inserted
  • You can try to use `mysql2` module instead of `mysql`. It supports promises so you can use async/await. In the other hand you could build a query in the for loop so it looks like this `INSERT INTO test (name) VALUES ("banana"), ("apple"), (...)` and execute it outside the for loop as a single query. – Molda May 30 '22 at 05:52
  • Hey Molda, thanks for your return. I tried a bit but I couldn't convert the above code to what I wanted. can you apply the solution to this code block? Thus, we can say that this is the result we will get when we write it this way in its most basic form. – user1111449 May 30 '22 at 06:35

2 Answers2

1

Try to use promise when you connection your mysql,and use async/await.

you can get approximate answer here

Hanshan
  • 21
  • 4
  • 1
    Hey, thanks for your return. Can you apply the solution to the simple code block above? Thus, we can say that this is the result we will get when we write it this way in its most basic form. – user1111449 May 30 '22 at 06:33
0

Try this approach with async - await and mysql2.
I changed the query to a prepared statement.

const mysql = require('mysql2/promise');

const loadData = async () => {
  try {
    var connection = await mysql.createConnection({
      host: 'localhost',
      user: '***',
      password: '***',
      database: '***',
      charset: 'utf8mb4',
    });

    var testArr = ['banana', 'apple', 'orange', 'strawberry'];

    for (let fruit of testArr) {
      console.log('fruit check:' + fruit);
      var sql = 'INSERT INTO test (name) VALUES (?)';
      await connection.execute(sql, [fruit])
      console.log('1 record inserted');
    }
  } catch (err) {
    throw err; // Or do something else with the error...
  }
};

loadData();
lpizzinidev
  • 12,741
  • 2
  • 10
  • 29