Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环Javascript中的MySQL查询不起作用_Javascript_Node.js_Loops_Closures - Fatal编程技术网

循环Javascript中的MySQL查询不起作用

循环Javascript中的MySQL查询不起作用,javascript,node.js,loops,closures,Javascript,Node.js,Loops,Closures,我在这个循环中使用了闭包。但是它只能在控制台日志上打印正确的数据,并且sql查询不起作用。MySQL上插入的数据是循环的最后一个变量。 我想这是因为MySQL的编写速度。但我不知道如何修复它。有什么想法吗? 谢谢 module.exports=函数(回调){ queryGetForSend=“从图像中选择*,其中发送请求为NULL,发送请求不为NULL,并且年(中间时间)=年(curdate())和月(中间时间)=月(curdate())和(时间(中间时间)

我在这个循环中使用了闭包。但是它只能在控制台日志上打印正确的数据,并且sql查询不起作用。MySQL上插入的数据是循环的最后一个变量。 我想这是因为MySQL的编写速度。但我不知道如何修复它。有什么想法吗? 谢谢

module.exports=函数(回调){
queryGetForSend=“从图像中选择*,其中发送请求为NULL,发送请求不为NULL,并且年(中间时间)=年(curdate())和月(中间时间)=月(curdate())和(时间(中间时间)<(curtime()-15));”;
conn.query(queryGetForSend,函数(err,行,字段){
用于(一行){
if(行[i]。post_请求==“批准”){
结果结束=1
}否则{
结果结束=2
}
var fileID=rows[i].img_md5;
queryString=fileID+“=”+resultSend;
//请求url:“http://im-api1.webpurify.com/image_queue/results/?key="
var d=新日期();
Date.masks.default='YYYY-MM-DD hh:MM:ss';
sendTime=d.format();
(函数(查询字符串、发送时间){
querySent=“更新图像集发送请求=1,结果发送=”+queryString+”,发送时间=“+sendTime+”,其中发送请求为空,后发送请求不为空,年(中时间)=年(curdate())和月(中时间)=月(curdate())和时间(中时间)<(curtime()-15));
conn.query(querySent,函数(err,行,字段){
如果(错误)抛出错误;
控制台日志(“http://google.com?key=“+键+”&“+查询字符串);
});
})(查询字符串,发送时间);
(函数(查询字符串){
请求。获取(“http://google.com“+key+”&“+queryString,函数(err,res,body){
});
})(质询);
}
//回调(行);
});
};
两条建议:

  • 避免SQL查询中的连接,请改用占位符或准备好的语句(如果您关心安全性的话)

  • 使用
    array.forEach()
    代替带有闭包的常规for循环,以避免意外使用for循环内设置的变量:

    conn.query(queryGetForSend, function(err, rows, fields) {
      if (err) throw err;
      rows.forEach(function(row) {
        var resultSend;
        if (row.post_request == 'approve') {
          resultSend = 1
        } else {
          resultSend = 2
        }
        var fileID = row.img_md5;
        var queryString = fileID + '=' + resultSend;
    
        var d = new Date();
        Date.masks.default = 'YYYY-MM-DD hh:mm:ss';
        var sendTime = d.format();
    
        var querySent = 'UPDATE image SET send_request=1, result_sent=?, send_time=? WHERE send_request IS NULL AND post_request IS NOT NULL AND year(moderate_time) = year(curdate()) AND month(moderate_time) = month(curdate()) AND (time(moderate_time) < (curtime() - 15));';
        conn.query(querySent, [queryString, sendTime], function (err) {
          if (err) throw err;
          console.log('http://google.com?key=' + key + '&' + queryString);
        });
    
        request.get('http://google.com?key=' + key + '&' + queryString, function(err, res, body) {
        });
      });
    });
    
    conn.query(queryGetForSend,函数(err,行,字段){
    如果(错误)抛出错误;
    rows.forEach(函数(行){
    var结果发现;
    如果(row.post_请求=='approve'){
    结果结束=1
    }否则{
    结果结束=2
    }
    var fileID=row.img_md5;
    var queryString=fileID+'='+resultSend;
    var d=新日期();
    Date.masks.default='YYYY-MM-DD hh:MM:ss';
    var sendTime=d.format();
    var querySent='UPDATE image SET send_request=1,result_sent=?,send_time=?其中send_request为NULL,post_request不为NULL,年份(中间时间)=年(curdate())和月(中间时间)=月(curdate())和时间(中间时间)<(curtime()-15));
    conn.query(querySent,[queryString,sendTime],函数(err){
    如果(错误)抛出错误;
    console.log('http://google.com?key=“+键+”&“+查询字符串);
    });
    请求。获取('http://google.com?key=“+key+”&“+queryString,函数(err,res,body){
    });
    });
    });
    

在使用for循环进行更改之前,我使用了forEach。但还是会发生。所以我认为sql查询可能是错的,我是对的!问题来自sql查询。它没有索引,所以当更新查询运行时,它也会对所有记录进行更新。这就是为什么console.log触发了正确的结果,而mysql没有。哦,谢谢你的建议,非常专业!
conn.query(queryGetForSend, function(err, rows, fields) {
  if (err) throw err;
  rows.forEach(function(row) {
    var resultSend;
    if (row.post_request == 'approve') {
      resultSend = 1
    } else {
      resultSend = 2
    }
    var fileID = row.img_md5;
    var queryString = fileID + '=' + resultSend;

    var d = new Date();
    Date.masks.default = 'YYYY-MM-DD hh:mm:ss';
    var sendTime = d.format();

    var querySent = 'UPDATE image SET send_request=1, result_sent=?, send_time=? WHERE send_request IS NULL AND post_request IS NOT NULL AND year(moderate_time) = year(curdate()) AND month(moderate_time) = month(curdate()) AND (time(moderate_time) < (curtime() - 15));';
    conn.query(querySent, [queryString, sendTime], function (err) {
      if (err) throw err;
      console.log('http://google.com?key=' + key + '&' + queryString);
    });

    request.get('http://google.com?key=' + key + '&' + queryString, function(err, res, body) {
    });
  });
});