在循环中用node-mysql插入数据

我的代码如下:

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 

它既不closures数据库连接也不插入任何数据。

我想在循环中插入数据。 但是在插入新logging之前,还需要检查它是否已经存在。

callback函数的闭包通过引用绑定到variablesk,而不是通过值。 这意味着当你执行callback的时候,它们都会得到最新的k值(101)。 为了在创build闭包时绑定到当前的k值,需要添加一个新的variables作用域。 也许是这样的:

 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){}); } }); }()); }