mysql
モジュールを使用してデータベーステーブルにいくつかの値を挿入するには、関数を呼び出してnode.js
とします。関数はfor
ループ内で呼び出され、関数内に各INSERT
クエリの最後のinsertId
が得られます。node.js + mysqlを使用した最後のinsertIdのグローバルスコープ
私の目的
私は自分のコードの後半でそれらを使用するために、アレイにこれらid's
を保存したいが、私ははそれを行うことはできません。
- 関数CALL
for(var i=0;i<some_number;i++){
if (<something is true>){
var lastid = [];
//Function calling
function_a(x, y, z, w, function(error, result) {
if(!error){
lastid.push(result.insertId);
}
//To Do
else{}
});
}
}
- FUNCTION
function function_a(a, b, c, d, callback){
//Connection to the DB
const con = mysql.createConnection({
host: 'host',
user: 'user',
password: 'password',
database: 'database'
});
//DB query
var query = "INSERT INTO my_table (column1, column1, column1, column1) VALUES ('"+a+"', '"+b+"', '"+c+"', '"+d+"')";
con.query(query, (err, rows) => {
var e = rows.insertId;
return callback(err, e);
});
con.end();
}
問題は、私は関数の外部IDを使用できないことです。
どのようにすればいいですか?これは可変スコープですか?
感謝をあなたの答えのために。私は最終的にコールバック関数を使用するとき、これは可変スコープに関するものだと信じています。私は '配列'を作成しました。idは常に空です。私を助けることができるサンプル? – GeoDim
forループの後で呼び出しているので空ですが、forループが反復を終了したという保証はありません。これは、その中の非同期操作(データベースクエリなど)のために起こります。それを正しく実行するには、[this loop callback pattern](http://www.richardrodger.com/2011/04/21/node-js-how-to-write-a-for-loop-コールバック/#。WcixIFuCyUk)、または[この例](promps.each(https://stackoverflow.com/questions/28736452/bluebird-promise-serial-iteration-and-resolve-to-modified-array) )関数の使用。 – cassini