在 NodeJS 中使用带有 SQL 请求的 While 循环
Posted
技术标签:
【中文标题】在 NodeJS 中使用带有 SQL 请求的 While 循环【英文标题】:Using A While Loop With An SQL Request In NodeJS 【发布时间】:2020-12-02 13:44:12 【问题描述】:所以我尝试使用 while 循环来遍历数组。我已经成功地获得了 sql 连接以使用没有 while 循环的代码打印结果,所以我知道查询有效,只是在 while 循环中不起作用。
var sql = "SELECT algorithm FROM algorithms WHERE AlgorithmName = " + con.escape(PLLNames[0]);
con.query(sql, function (err, result)
console.log("Sup")
if (err) throw err;
console.log("Result: " + result);
x+=1;
console.log(x)
);
res.render("PLL",
algorithmTest: result,
);
使用类似的东西可以正常工作,但是当我编辑它以进行循环时,代码会中断。我知道它没有执行查询,因为它没有记录结果,也没有给出错误。由于某种原因,代码甚至没有尝试执行查询。这就是我试图做的工作
x = 0;
while (x < 20)
var sql = "SELECT algorithm FROM algorithms WHERE AlgorithmName = " + con.escape(PLLNames[0]);
con.query(sql, function (err, result)
console.log("Sup")
if (err) throw err;
console.log("Result: " + result);
x+=1;
console.log(x)
);
;
res.render("PLL",
algorithmTest: result,
);
有人知道为什么会这样吗?
【问题讨论】:
假设con.query
本质上是异步的,给定一个回调。
请仅使用带参数的准备好的语句参见***.com/questions/15778572/…以防止sql注入
【参考方案1】:
出现问题是因为con.query
异步工作,因此res.render
不等待while
循环调度的sql 查询。您可以通过使用递归函数而不是 while
循环来解决此问题:
function next(counter, limit, callback)
if (counter >= limit)
callback()
return;
var sql = "your SQL query";
con.query(sql, function (err, result)
if (err) throw err;
console.log("Result: " + result);
counter+=1;
next(counter, limit, callback);
);
next(0, 20, function()
res.render("PLL",
algorithmTest: result,
);
)
【讨论】:
【参考方案2】:最好的解决方案是有一个堆栈来保存应该运行的内容。 我认为这个示例将帮助您入门并且易于理解和理解。
const stack = [];
let x = 0;
const results = [];
// Fill the stack
while (x < 20)
// are you sure you don't want PLLNames[x] ?
stack.push("SELECT algorithm FROM algorithms WHERE AlgorithmName = " + con.escape(PLLNames[0]));
x++;
function worker()
if(stack.length > 0)
let sql = stack.shift();
con.query(sql, function (err, result)
console.log("Sup")
if (err) throw err;
console.log("SQL: " + sql);
console.log("Result: " + result);
results.push(result);
worker();
);
else
// Not sure what you want to do with the results, but you got 20 of them so somehow you need to process it into one result.
res.render(JSON.stringify(results));
【讨论】:
以上是关于在 NodeJS 中使用带有 SQL 请求的 While 循环的主要内容,如果未能解决你的问题,请参考以下文章