【问题标题】:insert data with node-mysql in loop在循环中使用 node-mysql 插入数据
【发布时间】:2011-10-31 11:30:50
【问题描述】:

我的代码如下:

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

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

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

【问题讨论】:

    标签: node.js


    【解决方案1】:

    回调函数的闭包通过引用而不是值绑定到变量 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){});
                }
            });
        }());
    }
    

    【讨论】:

    • kCopy 似乎不需要
    猜你喜欢
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 2012-04-23
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多