gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 23:06:45 27 4
gpt4 key购买 nike

我的代码如下:

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

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

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

最佳答案

回调函数的闭包通过引用而不是值绑定(bind)到变量 k。这意味着当您执行回调时,它们都获得了最新的 k 值 (101)。为了在创建闭包时绑定(bind)到当前的 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){});
}
});
}());
}

关于node.js - 在循环中使用node-mysql插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7136518/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com