我的代码如下:
var mysql= require('mysql');
var client = mysql.createClient({
user: 'root',
password: 'root',
host: 'localhost'
});
client.query('USE sample');
for(var k=0;k<=100;k++)
{
var sql="SELECT `id` FROM `data` WHERE `id`= ?";
console.log(k);
client.query(sql,[k],function(err,results,field){
console.log("DATABASE "+k);
if(results.length == 0) {
var sql2="INSERT INTO `data` (`id`) VALUES (?);";
client.query(sql2,[k],function(err,results,field){
});
}
});
}
client.end();
当我运行这段代码时,结果如下:
1
2
3
...
100
Database 101
Database 101
Database 101
...
Database 101
,它既不关闭数据库连接也不插入任何数据。
我想在循环中插入数据。但是在插入新记录之前,它还需要检查它是否已经存在。
回调函数的闭包通过引用而不是通过值绑定到变量k。这意味着在执行回调时,它们都得到最新的k值(101)。为了在闭包创建时绑定到当前的k值,您需要添加一个新的变量范围。也许像这样:
for(var k=0;k<=100;k++) {
var sql="SELECT `id` FROM `data` WHERE `id`= ?";
console.log(k);
(function () {
var kCopy = k;
client.query(sql,[kCopy],function(err,results,field){
console.log("DATABASE "+kCopy);
if(results.length == 0) {
var sql2="INSERT INTO `data` (`id`) VALUES (?);";
client.query(sql2,[kCopy],function(err,results,field){});
}
});
}());
}