【问题标题】:Javascript for loop doesn't seem to be changing the value of 'i'?Javascript for循环似乎没有改变'i'的值?
【发布时间】:2013-07-25 22:47:52
【问题描述】:

我正在尝试运行这个循环,我希望在其中改变“i”的值。

但是,对于循环的所有 4 次迭代,该值似乎都停留在零。

for(var i=0;i<5;i++){

        client.query('SELECT curattend FROM table1 WHERE ind=("++i++")', function(err,result){
        att = result[0].curattend;
        console.log(att)
        });
}

有人对为什么会发生这种情况有任何建议吗?谢谢!

【问题讨论】:

  • 您硬编码了result[0],而不是使用result[i]。也许您还打算连接到字符串中?
  • 即使您使用result[i],我也会假设client.query 是异步的,这意味着您仍然会得到不想要的结果。如果是这样,请从数百个涉及在循环中分配处理程序的问题中找出一个。

标签: javascript mysql node.js for-loop


【解决方案1】:

您没有在查询中包含变量i,您只是查询了硬编码字符串("++i++")

这个:

client.query('SELECT curattend FROM table1 WHERE ind=("++i++")', function(err,result){

应该是:

client.query('SELECT curattend FROM table1 WHERE ind = ?', [i], function(err,result){

【讨论】:

  • 在这个例子中技术上无关紧要,但是在构建将传递给数据库的查询字符串时,您应该养成使用占位符(上面的?)的习惯。几乎每个数据库客户端库都有一个等效的功能,它允许数据库客户端库对输入参数进行适当的转义和清理。有时,您可能不确定该值是什么样的,使用简单的字符串连接可能是一个主要的安全问题。
【解决方案2】:

您已将“++i++”放在一个用单引号 (') 括起来的字符串中。您也必须使用单引号来转义字符串。

使用这个:

client.query('SELECT curattend FROM table1 WHERE ind=('+i+')', function(err,result){

【讨论】:

  • 是的,做到了!谢谢!
猜你喜欢
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 2021-03-16
相关资源
最近更新 更多