如何使用node-mysql将MySql查询的结果保存在变量中

时间:2014-09-29 12:40:31

标签: mysql node.js

我试图使用node-mysql模型和node.js在变量中保存MySql查询的结果,所以我有这样的代码:

connection.query("select * from ROOMS", function(err, rows){
if(err) {
    throw err;
} else {
    console.log(rows);
}
});

结果是:

[ { idRooms: 1, Room_Name: 'dd' },
  { idRooms: 2, Room_Name: 'sad' } ]

所以我需要将这个结果存储在变量中,所以我尝试这样:

 var someVar = connection.query("select * from ROOMS", function(err, rows){
if(err) {
    throw err;
} else {
    return rows;
}
});

console.log(someVar);   

但是没有工作,谢谢你事先提供任何帮助。

4 个答案:

答案 0 :(得分:12)

嗯@Fadi,connection.query是异步的,这意味着当您的console.log(someVar)someVar来电尚未设置时。

你能做什么:

var someVar = [];

connection.query("select * from ROOMS", function(err, rows){
  if(err) {
    throw err;
  } else {
    setValue(rows);
  }
});

function setValue(value) {
  someVar = value;
  console.log(someVar);
}

答案 1 :(得分:2)

您无法做到这一点,因为网络i / o在node.js中是异步和非阻塞的。因此,之后出现的任何逻辑必须在查询完成后才能执行,您必须将放在查询的回调中。如果您有许多嵌套异步操作,可以考虑使用async之类的模块来帮助更好地组织异步任务。

答案 2 :(得分:2)

作为已经给出答案的补充。

var **someVar** = connection.query( *sqlQuery*, *callback function( err , row , fields){}* )

console.log(**someVar**);

此构造将返回此连接的 someVar 信息及其SQL查询。它不会从查询中返回值。

查询中的值位于回调函数(错误,行,字段)

答案 3 :(得分:1)

如果要将变量分配给res.render

,这是您的答案
//before define the values
var tum_render = [];
tum_render.title = "Turan";
tum_render.description = "Turan'ın websitesi";

//left the queries seperatly
var rastgeleQuery = "SELECT baslik,hit FROM icerik ORDER BY RAND() LIMIT 1";
var son5Query = "SELECT baslik,hit FROM icerik LIMIT 5";

var query_arr = [rastgeleQuery, son5Query];
var query_name = ['rastgele', 'son5'];

//and the functions are

//query for db
function runQuery(query_arr,sira){
    connection.query(query_arr[sira], function(err, rows, fields) {
        if (err) throw err;
        var obj = [];
        obj[query_name[sira]] = rows;
        sonuclar.push(obj);
        if (query_arr.length <= sira+1){
            sonuc();
        }else{
            runQuery(query_arr, sira+1);
        }
    });
 }

//the function joins some functions http://stackoverflow.com/questions/2454295/javascript-concatenate-properties-from-multiple-objects-associative-array
function collect() {
      var ret = {};
      var len = arguments.length;
      for (var i=0; i<len; i++) {
        for (p in arguments[i]) {
          if (arguments[i].hasOwnProperty(p)) {
            ret[p] = arguments[i][p];
          }
        }
      }
      return ret;
}

//runQuery callback
function sonuc(){
        for(var x = 0; x<=sonuclar.length-1; x++){
            tum_render = collect(tum_render,sonuclar[x]);
        }
    console.log(tum_render);
    res.render('index', tum_render);
}