我在node.js中遇到SQL问题。
我有一个阵列'数据'其中包含从异步函数返回的一些数据,如果没有相同数据的结果,我想把它放到MySQL数据库中。数组中有一些重复的对象,但我想只将一个放入数据库。
功能示例:
async function data_name(param){
var data = [];
data.push({
name: param,
sname: 'sname',
url: 'url',
report: 'report'
});
return data;
}
然后我运行以下代码:
var data = await data_name('name');
data.forEach(item=>{
var chk = "SELECT * FROM `?` WHERE `name` = ? AND `sname` = ?;";
con.query(chk, [tablename, item.name, item.sname], function(er,items){
if(er) throw er;
if(items.length < 1){
var insert = "INSERT INTO `?` (name, sname, url, report) VALUES (?,?,?,?)";
con.query(insert, [tablename, item.name, item.sname, item.url, item.report], function(erg,added){
if(erg) throw erg;
console.log('Item added: ' + item.name);
});
}
else{
if(items[0].report != item.report){
var upd = "UPDATE `?` SET report = ? WHERE id = ?";
con.query(upd, [tablename, item.report, items[0].id], function(ere,edited){
if(ere) throw ere;
console.log('Item updated: ' +items[0].name);
});
}
}
//broken code below
var adc = "SELECT * FROM `links` WHERE `link` = ?;";
con.query(adc, item.url, function(erc, results){
//tried also with: results[0] === undefined || results[0] === null
var test = item.url + ' ' + results.length;
console.log(test);
if(results.length < 1){
var add_c = "INSERT INTO `links` (link_name, link_url) VALUES (?,?)";
con.query(add_c, [item.name, item.url], function(era, a_link){
if(era) throw era;
});
}
else{console.log('Record exists');}
});
});
});
第一个SQL效果很好:它将所有记录都插入到数据库中,没有重复项,如果需要,它会更新值。
如果数据库为空,则第二个SQL(我之前提供的代码中的注释提到)无法正常工作。它复制了数据库中的记录(运行后数据库有470条记录,而每条记录重复约8次)。
测试变量打印例如:
问题仅在数据库为空时存在(如果我第二次运行代码,第二个SQL不会插入记录新记录并在控制台中打印&#39;记录存在&#39;
任何想法可能是什么原因?